6package editeurpanovisu;
8import com.drew.imaging.ImageMetadataReader;
9import com.drew.imaging.ImageProcessingException;
10import com.drew.metadata.Directory;
11import com.drew.metadata.Metadata;
19import java.awt.MouseInfo;
21import java.io.BufferedReader;
22import java.io.BufferedWriter;
24import java.io.FileInputStream;
25import java.io.FileNotFoundException;
26import java.io.FileOutputStream;
27import java.io.IOException;
28import java.io.InputStreamReader;
29import java.io.OutputStreamWriter;
30import java.io.UnsupportedEncodingException;
31import java.math.BigDecimal;
32import java.net.MalformedURLException;
34import java.net.URISyntaxException;
36import java.net.URLConnection;
37import java.nio.file.Files;
38import java.nio.file.StandardCopyOption;
39import java.util.zip.ZipEntry;
40import java.util.zip.ZipOutputStream;
41import java.util.ArrayList;
42import java.util.Arrays;
44import java.util.Locale;
45import java.util.Optional;
46import java.util.Properties;
47import java.util.ResourceBundle;
48import java.util.logging.Level;
49import java.util.logging.Logger;
50import javafx.animation.KeyFrame;
51import javafx.animation.Timeline;
52import javafx.application.Application;
53import javafx.application.Platform;
54import javafx.beans.property.DoubleProperty;
55import javafx.beans.property.SimpleDoubleProperty;
56import javafx.beans.value.ObservableValue;
57import javafx.collections.FXCollections;
58import javafx.collections.ObservableList;
59import javafx.concurrent.Task;
60import javafx.event.ActionEvent;
61import javafx.geometry.Insets;
62import javafx.geometry.Orientation;
64import javafx.geometry.Rectangle2D;
65import javafx.geometry.Side;
69import javafx.scene.control.Alert;
70import javafx.scene.control.Alert.AlertType;
71import javafx.scene.control.Button;
72import javafx.scene.control.ButtonType;
73import javafx.scene.control.CheckBox;
74import javafx.scene.control.ChoiceDialog;
75import javafx.scene.control.ColorPicker;
76import javafx.scene.control.ComboBox;
77import javafx.scene.control.Label;
78import javafx.scene.control.ListView;
79import javafx.scene.control.Menu;
80import javafx.scene.control.MenuBar;
81import javafx.scene.control.MenuButton;
82import javafx.scene.control.MenuItem;
83import javafx.scene.control.ProgressBar;
84import javafx.scene.control.RadioButton;
85import javafx.scene.control.ScrollPane;
86import javafx.scene.control.Separator;
87import javafx.scene.control.SeparatorMenuItem;
88import javafx.scene.control.Slider;
89import javafx.scene.control.Tab;
90import javafx.scene.control.TabPane;
91import javafx.scene.control.TextArea;
92import javafx.scene.control.TextField;
93import javafx.scene.control.TextInputDialog;
94import javafx.scene.control.Toggle;
95import javafx.scene.control.ToggleButton;
96import javafx.scene.control.ToggleGroup;
97import javafx.scene.control.ToolBar;
98import javafx.scene.control.Tooltip;
99import javafx.scene.image.Image;
100import javafx.scene.image.ImageView;
101import javafx.scene.image.PixelReader;
102import javafx.scene.image.PixelWriter;
103import javafx.scene.image.WritableImage;
104import javafx.scene.input.DragEvent;
105import javafx.scene.input.Dragboard;
106import javafx.scene.input.KeyCode;
107import javafx.scene.input.KeyCodeCombination;
108import javafx.scene.input.KeyCombination;
109import javafx.scene.input.MouseButton;
110import javafx.scene.input.MouseEvent;
111import javafx.scene.input.TransferMode;
112import javafx.scene.layout.AnchorPane;
113import javafx.scene.layout.Background;
114import javafx.scene.layout.BackgroundFill;
115import javafx.scene.layout.CornerRadii;
116import javafx.scene.layout.FlowPane;
117import javafx.scene.layout.HBox;
118import javafx.scene.layout.Pane;
119import javafx.scene.layout.StackPane;
120import javafx.scene.layout.VBox;
121import javafx.scene.paint.Color;
122import javafx.scene.shape.Circle;
123import javafx.scene.shape.Line;
124import javafx.scene.shape.Polygon;
125import javafx.scene.shape.Rectangle;
126import javafx.scene.shape.StrokeLineCap;
127import javafx.scene.shape.StrokeLineJoin;
128import javafx.scene.shape.StrokeType;
129import javafx.scene.text.Font;
130import javafx.scene.text.TextAlignment;
131import javafx.scene.web.WebEngine;
132import javafx.scene.web.WebView;
133import javafx.stage.DirectoryChooser;
134import javafx.stage.FileChooser;
135import javafx.stage.Modality;
136import javafx.stage.Screen;
138import javafx.stage.WindowEvent;
139import javafx.util.Duration;
140import org.apache.commons.imaging.ImagingException;
177 final URL url =
new URI(
"http://www.google.com").toURL();
1525 getScene().setCursor(Cursor.HAND);
1531 getScene().setCursor(Cursor.DEFAULT);
1785 "Haut/Up",
"Droite/Right",
"Bas/Down",
"Gauche/Left",
1786 "Zoom +",
"Zoom -",
"Info",
"Aide/Help",
1787 "Rotation",
"mode Souris/Mouse",
"Plein Ecran/Fullscreen",
1788 "Lien/Link 1",
"Lien/Link 2",
1789 "zone 1",
"zone 2",
"zone 3",
"zone 4",
"zone 5",
1790 "zone 6",
"zone 7",
"zone 8",
"zone 9",
"zone 10"
1793 "telUp",
"telRight",
"telDown",
"telLeft",
1794 "telZoomPlus",
"telZoomMoins",
"telInfo",
"telAide",
1795 "telRotation",
"telSouris",
"telFS",
1796 "telLien-1",
"telLien-2",
1797 "area-1",
"area-2",
"area-3",
"area-4",
"area-5",
1798 "area-6",
"area-7",
"area-8",
"area-9",
"area-10"
2063 System.out.println(
"🔍 DEBUG - Recherche des hotspots avec couleurs personnalisées...");
2069 if (
hs.getStrCouleurPerso() !=
null && !
hs.getStrCouleurPerso().isEmpty()) {
2085 System.out.println(
"⚠️ Hotspot pano " +
iPano +
"." +
iHS +
" : utilisation image globale (pas d'image personnalisée)");
2087 System.out.println(
"✅ Hotspot pano " +
iPano +
"." +
iHS +
" : utilisation image personnalisée");
2102 if (
hs.getStrCouleurPerso() !=
null && !
hs.getStrCouleurPerso().isEmpty()) {
2118 System.out.println(
"⚠️ Hotspot image " +
iPano +
"." +
iHS +
" : utilisation image globale (pas d'image personnalisée)");
2120 System.out.println(
"✅ Hotspot image " +
iPano +
"." +
iHS +
" : utilisation image personnalisée");
2135 if (
hs.getStrCouleurPerso() !=
null && !
hs.getStrCouleurPerso().isEmpty()) {
2151 System.out.println(
"⚠️ Hotspot HTML " +
iPano +
"." +
iHS +
" : utilisation image globale (pas d'image personnalisée)");
2153 System.out.println(
"✅ Hotspot HTML " +
iPano +
"." +
iHS +
" : utilisation image personnalisée");
2220 System.err.println(
"⚠️ Erreur lors de la régénération de l'icône : " +
entry.getKey());
2221 ex.printStackTrace();
2232 System.out.println(
" - " +
f.getName());
2247 System.err.println(
"⚠️ Barre personnalisée null - fichier telecommande.png non généré");
2283 if (!strTypeHS.equals(
"gif")) {
2291 if (!strTypeHSImage.equals(
"gif")) {
2298 if (!strTypeHSHTML.equals(
"gif")) {
2395 +
" Visite générée par l'éditeur panoVisu \n"
2397 +
" Création L.LANG le monde à 360° : http://lemondea360.fr\n"
2410 if (!
tfVisite.getText().equals(
"")) {
2415 +=
" afftitre=\"oui\"\n"
2416 +
" titre=\"" +
strTit +
"\"\n"
2421 if (!
tfVisite.getText().equals(
"")) {
2426 +=
" afftitre=\"oui\"\n"
2427 +
" titre=\"" +
strTit +
"\"\n";
2433 if (!
tfVisite.getText().equals(
"")) {
2438 +=
" afftitre=\"oui\"\n"
2443 +=
" afftitre=\"non\"\n";
2456 +=
" titreTaille=\"adapte\"\n";
2465 +
" multiReso=\"oui\"\n"
2467 +
" zeroNord=\"" +
zN +
"\"\n"
2468 +
" regardX=\"" +
regX +
"\"\n"
2503 .replace(
"&",
"&")
2504 .replace(
"<",
"<")
2505 .replace(
">",
">")
2506 .replace(
"\"",
""")
2507 .replace(
"'",
"'");
2537 +=
" <!--Définition de la Barre de navigation-->\n"
2539 +
" styleBoutons=\"navigation\"\n"
2540 +
" couleur=\"rgba(255,255,255,0)\"\n"
2541 +
" bordure=\"rgba(255,255,255,0)\"\n"
2559 +=
"<!-- Barre de Navigation Personnalisée -->\n\n"
2560 +
" <telecommande\n"
2576 +
" visible=\"oui\">\n";
2580 +
"alt=\"\" title=\"\" "
2592 +
" affiche=\"oui\"\n"
2608 +
" <fenetreInfo \n"
2609 +
" affiche=\"oui\"\n"
2627 +
" <fenetreAide \n"
2628 +
" affiche=\"oui\"\n"
2642 +
" <menuContextuel \n"
2643 +
" affiche=\"oui\"\n"
2662 +
" <suivantPrecedent\n"
2683 +
" <marcheArret \n"
2685 +
" image=\"MA.png\"\n"
2695 +
" plan=\"" +
strPlan +
"\"\n"
2709 +
" <reseauxSociaux \n"
2710 +
" affiche=\"oui\"\n"
2719 +
" meta=\"" +
strMeta +
"\"\n"
2735 +
" opacite=\"1.0\"\n"
2748 +=
" <imageVignette \n"
2750 +
" xml=\"xml/" +
strXML +
"\"\n"
2755 +=
" </vignettes> \n"
2782 +=
" <imageComboMenu \n";
2789 +=
" selectionne=\"selected\"\n";
2792 +=
" xml=\"xml/" +
strXML +
"\"\n"
2798 +=
" </comboMenu> \n"
2813 String strTypeAnimation =
HS.getStrTypeAnimation();
2818 +
" type=\"panoramique\"\n"
2819 +
" long=\"" +
longit +
"\"\n"
2820 +
" lat=\"" +
HS.getLatitude() +
"\"\n"
2824 if (
HS.getStrFichierImage() !=
null && !
HS.getStrFichierImage().isEmpty()) {
2826 +=
" image=\"panovisu/images/hotspots/" +
HS.getStrFichierImage() +
"\"\n";
2827 }
else if (!strTypeHS.equals(
"gif")) {
2829 +=
" image=\"panovisu/images/hotspots/hotspot.png\"\n";
2833 +=
" image=\"panovisu/images/hotspots/" +
strNomHSGif +
"\"\n";
2836 +=
" xml=\"xml/panovisu" +
HS.getNumeroPano() +
".xml\"\n";
2837 if (
HS.getRegardX() != 1000) {
2840 if (
HS.getRegardY() != 1000) {
2843 if (
HS.getChampVisuel() != 0) {
2847 strContenuFichier +=
" info=\"" +
HS.getStrInfo().replace(
"<",
"<").replace(
">",
">").replace(
"\"",
""") +
"\"\n"
2848 +
" anime=\"" + strTypeAnimation +
"\"\n"
2855 if (!
HS.isbLienExterieur()) {
2857 strUrlHTML =
"pagesHTML/" +
i +
"/page" +
j +
"/index.html";
2872 String strTypeAnimation =
HS.getStrTypeAnimation();
2879 +
" type=\"html\"\n"
2880 +
" long=\"" +
longit +
"\"\n"
2881 +
" lat=\"" +
HS.getLatitude() +
"\"\n"
2885 if (
HS.getStrFichierImage() !=
null && !
HS.getStrFichierImage().isEmpty()) {
2887 +=
" image=\"panovisu/images/hotspots/" +
HS.getStrFichierImage() +
"\"\n";
2888 }
else if (!strTypeHSHTML.equals(
"gif")) {
2890 +=
" image=\"panovisu/images/hotspots/hotspotHTML.png\"\n";
2892 String strNomHSGif = strNomfichierHSHTML.substring(strNomfichierHSHTML.lastIndexOf(
File.separator) + 1);
2894 +=
" image=\"panovisu/images/hotspots/" +
strNomHSGif +
"\"\n";
2898 +
" info=\"" +
HS.getStrInfo().replace(
"<",
"<").replace(
">",
">").replace(
"\"",
""") +
"\"\n"
2899 +
" taille=\"" +
Math.round(
HS.getLargeurHTML()) +
"px\"\n"
2900 +
" position=\"" +
HS.getStrPositionHTML() +
"\"\n"
2902 +
" anime=\"" + strTypeAnimation +
"\"\n"
2926 String strTypeAnimation =
HS.getStrTypeAnimation();
2927 if (strTypeAnimation ==
null || strTypeAnimation.isEmpty()) {
2928 strTypeAnimation =
"blink";
2933 +
" type=\"html\"\n"
2934 +
" long=\"" +
longit +
"\"\n"
2935 +
" lat=\"" +
HS.getLatitude() +
"\"\n"
2937 if (!strTypeHSImage.equals(
"gif")) {
2939 +=
" image=\"panovisu/images/hotspots/hotspotImage.png\"\n";
2941 String strNomHSGif = strNomfichierHSImage.substring(strNomfichierHSImage.lastIndexOf(
File.separator) + 1);
2943 +=
" image=\"panovisu/images/hotspots/" +
strNomHSGif +
"\"\n";
2947 +
" taille=\"90%\"\n"
2948 +
" info=\"" +
HS.getStrInfo().replace(
"<",
"<").replace(
">",
">").replace(
"\"",
""") +
"\"\n"
2950 +
" anime=\"" + strTypeAnimation +
"\"\n"
2977 String strTypeAnimation =
HS.getStrTypeAnimation();
2983 +
" type=\"image\"\n"
2984 +
" long=\"" +
longit +
"\"\n"
2985 +
" lat=\"" +
HS.getLatitude() +
"\"\n"
2989 if (
HS.getStrFichierImage() !=
null && !
HS.getStrFichierImage().isEmpty()) {
2991 +=
" image=\"panovisu/images/hotspots/" +
HS.getStrFichierImage() +
"\"\n";
2992 }
else if (!strTypeHSImage.equals(
"gif")) {
2994 +=
" image=\"panovisu/images/hotspots/hotspotImage.png\"\n";
2996 String strNomHSGif = strNomfichierHSImage.substring(strNomfichierHSImage.lastIndexOf(
File.separator) + 1);
2998 +=
" image=\"panovisu/images/hotspots/" +
strNomHSGif +
"\"\n";
3001 +=
" img=\"images/" +
HS.getStrLienImg() +
"\"\n"
3002 +
" info=\"" +
HS.getStrInfo().replace(
"<",
"<").replace(
">",
">").replace(
"\"",
""") +
"\"\n"
3004 +
" anime=\"" + strTypeAnimation +
"\"\n"
3010 +
"<!-- Définition des images de fond -->\n"
3023 +
" posX=\"" + imgFond.
getStrPosX() +
"\" \n"
3024 +
" posY=\"" + imgFond.
getStrPosY() +
"\" \n"
3025 +
" offsetX=\"" + imgFond.
getOffsetX() +
"\" \n"
3026 +
" offsetY=\"" + imgFond.
getOffsetY() +
"\" \n"
3027 +
" tailleX=\"" + imgFond.
getTailleX() +
"\" \n"
3028 +
" tailleY=\"" + imgFond.
getTailleY() +
"\" \n"
3029 +
" opacite=\"" + imgFond.
getOpacite() +
"\" \n"
3033 +
" url=\"" + imgFond.
getStrUrl() +
"\" \n"
3034 +
" infobulle=\"" + imgFond.
getStrInfobulle().replace(
"<",
"<").replace(
">",
">").replace(
"\"",
""") +
"\" \n"
3049 +
" affiche=\"oui\" \n"
3050 +
" image=\"images/" +
planPano.getStrImagePlan() +
"\"\n"
3055 +
" nord=\"" +
planPano.getDirectionNord() +
"\"\n"
3057 +
" boussolePosition=\"" +
planPano.getStrPosition() +
"\"\n"
3058 +
" boussoleX=\"" +
planPano.getPositionX() +
"\"\n"
3059 +
" boussoleY=\"" +
planPano.getPositionX() +
"\"\n"
3073 +
" positX=\"" +
posX +
"\"\n"
3074 +
" positY=\"" +
posY +
"\"\n"
3075 +
" xml=\"actif\"\n"
3081 +
" positX=\"" +
posX +
"\"\n"
3082 +
" positY=\"" +
posY +
"\"\n"
3083 +
" xml=\"xml/panovisu" +
planPano.getHotspot(
iPoint).getNumeroPano() +
".xml\"\n"
3084 +
" texte=\"" +
planPano.getHotspot(
iPoint).getStrInfo() +
"\"\n"
3106 +
" affiche=\"oui\" \n"
3110 +
" coordCentreLong=\"" +
coords.getLongitude() +
"\"\n"
3111 +
" coordCentreLat=\"" +
coords.getLatitude() +
"\"\n"
3132 .getStrNomFichier().
length()).split(
"\\.")[0];
3133 String strHTML =
"<span style='font-family : Verdana,Arial,sans-serif;font-weight:bold;font-size : 12px;'>"
3141 +
" positX=\"" +
posX +
"\"\n"
3142 +
" positY=\"" +
posY +
"\"\n"
3143 +
" xml=\"actif\"\n"
3144 +
" image=\"panos/" + strFichierXML +
"Vignette.jpg\"\n"
3145 +
" html=\"" +
strHTML +
"\"\n"
3151 +
" positX=\"" +
posX +
"\"\n"
3152 +
" positY=\"" +
posY +
"\"\n"
3153 +
" xml=\"xml/" + strFichierXML +
".xml\"\n"
3154 +
" image=\"panos/" + strFichierXML +
"Vignette.jpg\"\n"
3155 +
" html=\"" +
strHTML +
"\"\n"
3180 if (!
tfVisite.getText().equals(
"")) {
3187 +
"<html lang=\"fr\">\n"
3190 +
" <meta charset=\"utf-8\">\n"
3191 +
" <meta name=\"viewport\" content=\"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0\">\n"
3192 +
" <link rel=\"stylesheet\" media=\"screen\" href=\"panovisu/libs/jqueryMenu/jquery.contextMenu.css\" type=\"text/css\"/>\n"
3193 +
" <link rel=\"stylesheet\" type=\"text/css\" href=\"panovisu/css/msdropdown/dd.css\" />\n"
3194 +
" <link rel=\"stylesheet\" type=\"text/css\" href=\"panovisu/css/panovisu.css\" />\n"
3195 +
" <meta name=\"url\" property=\"og:url\" content=\"\" />\n"
3196 +
" <meta property=\"og:title\" name=\"twitter:title\" content=\"" +
strTitreVis +
"\" />\n"
3197 +
" <meta itemprop=\"description\" property=\"og:description\" name=\"twitter:description\" content=\"Une page créée avec panoVisu Editeur : 100% Libre 100% HTML5\" />\n"
3198 +
" <meta name=\"img\" property=\"og:image\" itemprop=\"image primaryImageOfPage\" content=\"./" +
strFPano1 +
"\" />\n"
3199 +
" <script type=\"text/javascript\" src=\"panovisu/libs/openLayers/OpenLayers.js\"></script>\n"
3200 +
" <script type=\"text/javascript\" src=\"panovisu/libs/openLayers/OpenStreetMap.js\"></script>\n"
3205 +
" .olControlLayerSwitcher\n"
3207 +
" font-family: Verdana,Arial,sans-serif!important;\n"
3208 +
" margin-top: 3px;\n"
3209 +
" margin-left: 3px;\n"
3210 +
" margin-bottom: 3px;\n"
3211 +
" font-size: 10pt!important;\n"
3212 +
" color: white;\n"
3213 +
" background-color: transparent;\n"
3214 +
" z-index: 10000;\n"
3215 +
" background-color: #999!important;\n"
3216 +
" color : #ff0!important;\n"
3217 +
" max-width: 180px!important;\n"
3218 +
" opacity: 0.95!important;\n"
3220 +
" .olControlLayerSwitcher .layersDiv\n"
3222 +
" padding-top: 5px;\n"
3223 +
" padding-left: 10px;\n"
3224 +
" padding-bottom: 5px;\n"
3225 +
" padding-right: 10px;\n"
3226 +
" background-color: #aaa!important;\n"
3227 +
" color : #fff!important;\n"
3228 +
" font-family: Verdana,Arial,sans-serif!important;\n"
3229 +
" font-size: 10pt!important;\n"
3230 +
" font-weight: normal!important;\n"
3231 +
" max-width: 180px!important;\n"
3232 +
" overflow: hidden!important;\n"
3233 +
" opacity: 0.95!important;\n"
3242 +
" padding: 3px 10px;\n"
3252 +
" z-index : 10000000;\n"
3258 +
" <body style='background-color:#777; margin-top: 8px; margin-bottom: 2px;overflow: hidden;'>\n"
3262 +
" <article style=\"height : " +
iHauteur +
"px;\">\n"
3263 +
" <div style='background-color : #777' id=\"pano\">\n"
3266 +
" <script src=\"panovisu/panovisuInit.js\"></script>\n"
3267 +
" <script src=\"panovisu/panovisu.js\"></script>\n"
3270 +
" $(function() {\n"
3271 +
" $('meta[name=img]').attr('content', document.location.href+\"" +
strFPano1 +
"\");\n"
3272 +
" $('meta[name=url]').attr('content', document.location.href);\n"
3273 +
" $(window).resize(function(){\n"
3274 +
" $(\"article\").height($(window).height()-17);\n"
3275 +
" $(\"#pano\").height($(window).height()-17);\n"
3277 +
" $(\"article\").height($(window).height()-17);\n"
3278 +
" $(\"#pano\").height($(window).height()-17);\n"
3280 +
" langue : \"" +
getLocale().toString() +
"\",\n"
3281 +
" panoramique: \"pano\",\n"
3284 +
" fenX: \"100%\",\n"
3285 +
" fenY: \"100%\",\n"
3286 +
" xml: \"xml/PANO.xml\"\n"
3288 +
" $(\".reseauSocial-twitter\").on(\"click\", function() {\n"
3290 +
" \"https://twitter.com/share?url=\" + document.location.href\n"
3292 +
" return false;\n"
3294 +
" $(\".reseauSocial-fb\").on(\"click\", function() {\n"
3295 +
" url=\"http://www.facebook.com/sharer.php?s=100&p[url]=\" + encodeURIComponent(document.location.href)\n"
3296 +
" + \"&p[images][0]=\" + encodeURIComponent(document.location.href + \"" +
strFPano1 +
"\")\n"
3297 +
" + \"&p[title]=\" + encodeURIComponent(\"" +
strTitreVis +
"\")\n"
3298 +
" + \"&p[summary]=\" + encodeURIComponent(\"Une page créée avec panoVisu Editeur : 100% Libre 100% HTML5\");\n"
3299 +
" window.open(url);\n"
3300 +
" return false;\n"
3302 +
" $(\".reseauSocial-google\").on(\"click\", function() {\n"
3304 +
" \"https://plus.google.com/share?url=\" + document.location.href + \"&hl=fr\"\n"
3306 +
" return false;\n"
3308 +
" $(\".reseauSocial-email\").attr(\"href\",\"mailto:?body=\" + document.location.href + \"&hl=fr\");\n"
3323 String strHtaccess =
"# Configuration pour éviter la compression automatique des images\n"
3324 +
"# Nécessaire pour préserver la qualité des panoramas haute résolution\n\n"
3325 +
"# Désactiver mod_pagespeed complètement\n"
3326 +
"<IfModule pagespeed_module>\n"
3327 +
" ModPagespeed off\n"
3328 +
" ModPagespeedDisableFilters rewrite_images,convert_jpeg_to_progressive,recompress_jpeg,resize_images,recompress_png,recompress_webp,convert_png_to_jpeg,convert_jpeg_to_webp\n"
3330 +
"# Empêcher la compression des images\n"
3331 +
"<IfModule mod_headers.c>\n"
3332 +
" # CloudFlare : désactiver Polish/Mirage/BGJ\n"
3333 +
" Header set cf-polished \"off\"\n"
3334 +
" Header set cf-bgj \"off\"\n"
3335 +
" Header set cf-mirage \"off\"\n"
3337 +
" # Empêcher toute transformation proxy/CDN\n"
3338 +
" <FilesMatch \"\\.(jpg|jpeg|png|gif|webp)$\">\n"
3339 +
" Header set Cache-Control \"public, max-age=31536000, immutable, no-transform\"\n"
3340 +
" Header unset Content-Encoding\n"
3341 +
" Header set X-No-Compression \"1\"\n"
3342 +
" </FilesMatch>\n"
3344 +
"# Désactiver la compression pour les images\n"
3345 +
"<IfModule mod_deflate.c>\n"
3346 +
" SetEnvIfNoCase Request_URI \\.(?:jpg|jpeg|png|gif|webp)$ no-gzip dont-vary\n"
3348 +
"# Bloquer les tentatives de redimensionnement automatique\n"
3349 +
"<IfModule mod_rewrite.c>\n"
3350 +
" RewriteEngine On\n"
3351 +
" # Bloquer les paramètres de redimensionnement\n"
3352 +
" RewriteCond %{QUERY_STRING} (width|height|resize|scale|thumbnail) [NC]\n"
3353 +
" RewriteRule ^.*\\.(jpg|jpeg|png)$ - [F,L]\n"
3355 +
"# Types MIME corrects\n"
3356 +
"<IfModule mod_mime.c>\n"
3357 +
" AddType image/jpeg .jpg .jpeg\n"
3358 +
" AddType image/png .png\n"
3359 +
" AddType image/gif .gif\n"
3360 +
" AddType image/webp .webp\n"
3369 System.out.println(
"✅ Fichier .htaccess créé à la racine de la visite");
3377 dcRepertChoix.setTitle(
"Choix du repertoire de sauvegarde de la visite");
3412 alert.setHeaderText(
null);
3415 +
"🌐 La visite sera accessible sur : " +
serverUrl +
"\n"
3416 +
"⚠️ Ne fermez pas l'application pour conserver l'accès à la visite.");
3417 alert.showAndWait();
3419 Application
app =
new Application() {
3421 public void start(Stage stage) {
3428 System.err.println(
"❌ Erreur lors du démarrage du serveur HTTP : " +
ex.getMessage());
3434 +
"⚠️ Le serveur HTTP n'a pas pu démarrer.\n"
3435 +
"La visite s'ouvrira en mode local (file://) ce qui peut causer des problèmes de sécurité.\n"
3436 +
"Pour une expérience optimale, copiez le dossier sur un serveur web.");
3439 Application
app =
new Application() {
3441 public void start(Stage stage) {
3445 app.getHostServices().showDocument(
indexFile.toURI().toString());
3452 alert.setHeaderText(
null);
3453 alert.setContentText(
rbLocalisation.getString(
"main.dialog.generationVisiteMessageErreur"));
3454 alert.showAndWait();
3468 fileChooser.setTitle(
"Sauvegarder l'archive ZIP de la visite");
3514 alert.setHeaderText(
null);
3515 alert.setContentText(
"Archive ZIP de la visite créée avec succès :\\n" +
zipFile.getAbsolutePath());
3516 alert.showAndWait();
3537 alert.setHeaderText(
null);
3538 alert.setContentText(
rbLocalisation.getString(
"main.dialog.generationVisiteMessageErreur"));
3539 alert.showAndWait();
3566 String htmlContent =
"<!DOCTYPE html>\\n<html>\\n<head>\\n<title>Visite Virtuelle</title>\\n</head>\\n<body>\\n<h1>Archive ZIP de la visite créée</h1>\\n<p>Extrayez ce fichier et ouvrez index.html dans un navigateur web.</p>\\n</body>\\n</html>";
3598 if (
files ==
null)
return;
3601 if (
file.isDirectory()) {
3611 byte[]
buffer =
new byte[1024];
3634 lblNiveaux.setText(
"Création niveau principal");
3638 String strExtension = strFichierImage.substring(strFichierImage.length() - 3, strFichierImage.length());
3643 if (
imgPano.getWidth() > 8192) {
3649 .getName()).log(
Level.SEVERE,
null,
ex);
3653 if (
imgPano.getWidth() > 8192) {
3654 imgPano =
new Image(
"file:" + strFichierImage, 8192, 4096,
true,
true);
3664 .getName()).log(
Level.SEVERE,
null,
ex);
3709 .getName()).log(
Level.SEVERE,
null,
ex);
3750 String strExtension = strFichierImage.substring(strFichierImage.length() - 3, strFichierImage.length());
3755 if (
imgPano.getWidth() > 4096) {
3761 .getName()).log(
Level.SEVERE,
null,
ex);
3765 if (
imgPano.getWidth() > 4096) {
3766 imgPano =
new Image(
"file:" + strFichierImage, 4096, 4096,
true,
true);
3770 String strNomPano = strFichierImage.substring(strFichierImage.lastIndexOf(
File.separator) + 1, strFichierImage.length());
3777 .getName()).log(
Level.SEVERE,
null,
ex);
3810 strNomPano = strFichierImage.substring(strFichierImage.lastIndexOf(
File.separator) + 1, strFichierImage.length());
3816 .getName()).log(
Level.SEVERE,
null,
ex);
3892 .getName()).log(
Level.SEVERE,
null,
ex);
3907 for (
int j = 0;
j <
i;
j++) {
3984 "-fx-border-color : #fff;"
3985 +
"-fx-border-width : 2px;"
3986 +
"-fx-border-style :solid;");
3991 "-fx-border-color : rgba(0,0,0,0);"
3992 +
"-fx-border-width : 0px;"
3993 +
"-fx-border-style :none;");
4077 .getName()).log(
Level.SEVERE,
null,
ex);
4121 System.out.println(
"🔄 Réinitialisation complète du projet...");
4128 System.out.println(
" ✓ Affichage hotspots retiré");
4131 System.err.println(
" ⚠️ Erreur retireAffichageHotSpots: " +
e.getMessage());
4137 System.out.println(
" ✓ Points hotspots retirés");
4140 System.err.println(
" ⚠️ Erreur retireAffichagePointsHotSpots: " +
e.getMessage());
4147 System.out.println(
" ✓ Vignettes panoramiques nettoyées");
4150 System.err.println(
" ⚠️ Erreur nettoyage vignettes: " +
e.getMessage());
4184 for (
int i = 0;
i <
plans.length;
i++) {
4206 System.err.println(
"⚠️ Erreur lors de la réinitialisation du cache IA: " +
e.getMessage());
4209 System.out.println(
"✅ Projet réinitialisé - Mémoire nettoyée");
4227 alert.setHeaderText(
null);
4230 alert.getButtonTypes().clear();
4241 .getName()).log(
Level.SEVERE,
null,
ex);
4316 .getName()).log(
Level.SEVERE,
null,
ex);
4378 .getName()).log(
Level.SEVERE,
null,
ex);
4383 .getName()).log(
Level.SEVERE,
null,
ex);
4407 alert.setHeaderText(
null);
4409 alert.getButtonTypes().clear();
4420 .getName()).log(
Level.SEVERE,
null,
ex);
4489 .getName()).log(
Level.SEVERE,
null,
ex);
4511 if (!
tfVisite.getText().equals(
"")) {
4560 System.out.println(
"[DEBUG] Pano " +
i +
" - Description IA: '" +
descIA +
"' (longueur: " +
descIA.length() +
", vide: " +
descIA.isEmpty() +
")");
4563 System.out.println(
"[DEBUG] Pano " +
i +
" - Description IA échappée: '" +
descEscapee +
"'");
4566 System.out.println(
"[DEBUG] Pano " +
i +
" - Description IA vide, non sauvegardée");
4573 +
";latitude:" +
HS.getLatitude()
4574 +
";image:" +
HS.getStrFichierImage()
4575 +
";xml:" +
HS.getStrFichierXML()
4576 +
";numXML:" +
HS.getNumeroPano()
4577 +
";info:" +
HS.getStrInfo().replace(
";",
"&pv").replace(
":",
"&dp")
4578 +
";typeAnimation:" +
HS.getStrTypeAnimation()
4579 +
";agranditSurvol:" +
HS.isAgranditSurvol()
4580 +
";couleurPerso:" + (
HS.getStrCouleurPerso() !=
null ?
HS.getStrCouleurPerso().replace(
";",
"&pv") :
"")
4581 +
";nomIconeSource:" + (
HS.getStrNomIconeSource() !=
null ?
HS.getStrNomIconeSource() :
"");
4582 if (
HS.getRegardX() != 1000) {
4585 if (
HS.getRegardY() != 1000) {
4588 if (
HS.getChampVisuel() != 0) {
4597 +
";latitude:" +
HS.getLatitude()
4598 +
";image:" +
HS.getStrFichierImage()
4599 +
";img:" +
HS.getStrLienImg()
4600 +
";urlImg:" +
HS.getStrUrlImage()
4601 +
";couleur:" +
HS.getStrCouleurFond()
4602 +
";opacite:" +
HS.getOpacite()
4603 +
";info:" +
HS.getStrInfo().replace(
";",
"&pv").replace(
":",
"&dp")
4604 +
";typeAnimation:" +
HS.getStrTypeAnimation()
4605 +
";agranditSurvol:" +
HS.isAgranditSurvol()
4606 +
";couleurPerso:" + (
HS.getStrCouleurPerso() !=
null ?
HS.getStrCouleurPerso().replace(
";",
"&pv") :
"")
4607 +
";nomIconeSource:" + (
HS.getStrNomIconeSource() !=
null ?
HS.getStrNomIconeSource() :
"")
4614 +
";latitude:" +
HS.getLatitude()
4615 +
";numDiapo:" +
HS.getiNumDiapo()
4616 +
";info:" +
HS.getStrInfo().replace(
";",
"&pv").replace(
":",
"&dp")
4617 +
";anime:" +
HS.isbAnime()
4624 +
";latitude:" +
HS.getLatitude()
4625 +
";lienExterieur:" +
HS.isbLienExterieur()
4626 +
";url:" +
HS.getStrURLExterieure()
4627 +
";info:" +
HS.getStrInfo().replace(
";",
"&pv").replace(
":",
"&dp")
4628 +
";typeAnimation:" +
HS.getStrTypeAnimation()
4629 +
";agranditSurvol:" +
HS.isAgranditSurvol()
4630 +
";position:" +
HS.getStrPositionHTML()
4631 +
";couleur:" +
HS.getStrCouleurHTML()
4632 +
";opacite:" +
HS.getOpaciteHTML()
4633 +
";largeur:" +
HS.getLargeurHTML()
4634 +
";couleurPerso:" + (
HS.getStrCouleurPerso() !=
null ?
HS.getStrCouleurPerso().replace(
";",
"&pv") :
"")
4635 +
";nomIconeSource:" + (
HS.getStrNomIconeSource() !=
null ?
HS.getStrNomIconeSource() :
"")
4665 +
"numPano:" +
i +
"\n"
4666 +
"numHSHTML:" +
j +
"\n"
4667 +
"texteHTML:" +
HS.
getStrTexteHTML().replace(
"\n",
"&nl").replace(
":",
"&dp").replace(
";",
"&pv") +
"\n"
4668 +
"numImages:" +
HS.getiNombreImages() +
"\n";
4669 for (
int k = 0;
k <
HS.getiNombreImages();
k++) {
4671 +=
"imagePath:" +
HS.getImagesEditeur()[
k].getStrImagePath() +
"\n";
4685 alert.setHeaderText(
null);
4687 alert.showAndWait();
4710 .getName()).log(
Level.SEVERE,
null,
ex);
4718 .getName()).log(
Level.SEVERE,
null,
ex);
4725 .getName()).log(
Level.SEVERE,
null,
ex);
4784 .getName()).log(
Level.SEVERE,
null,
ex);
4807 alert.setHeaderText(
null);
4809 alert.getButtonTypes().clear();
4820 .getName()).log(
Level.SEVERE,
null,
ex);
4829 System.out.println(
"✅ Serveur HTTP arrêté lors de la fermeture de l'application");
4831 System.err.println(
"⚠️ Erreur lors de l'arrêt du serveur HTTP : " +
ex.getMessage());
4852 alert.setHeaderText(
null);
4854 alert.getButtonTypes().clear();
4865 .getName()).log(
Level.SEVERE,
null,
ex);
4921 event.acceptTransferModes(TransferMode.ANY);
4961 event.setDropCompleted(
bSucces);
5004 if (
path.exists()) {
5054 "-fx-border-color : #fff;"
5055 +
"-fx-border-width : 2px;"
5056 +
"-fx-border-style :solid;");
5061 "-fx-border-color : rgba(0,0,0,0);"
5062 +
"-fx-border-width : 0px;"
5063 +
"-fx-border-style :none;");
5182 .getName()).log(
Level.SEVERE,
null,
ex);
5210 case "afficheTitre":
5213 case "affDescription":
5261 case "longitudeGeo":
5269 case "descriptionIA":
5314 HS.setStrFichierImage(
null);
5321 HS.setStrInfo(
null);
5328 HS.setStrFichierXML(
null);
5336 case "typeAnimation":
5343 case "agranditSurvol":
5346 case "couleurPerso":
5349 case "nomIconeSource":
5357 if ((
HS.getStrCouleurPerso() !=
null && !
HS.getStrCouleurPerso().isEmpty()) ||
5358 (
HS.getStrNomIconeSource() !=
null && !
HS.getStrNomIconeSource().isEmpty())) {
5360 ?
HS.getStrNomIconeSource()
5390 HS.setStrFichierImage(
null);
5397 HS.setStrCouleurFond(
"");
5411 HS.setStrInfo(
null);
5418 HS.setStrLienImg(
null);
5425 HS.setStrUrlImage(
null);
5446 +
"imagePasTrouvee."
5454 +
"imagePasTrouvee."
5467 .getName()).log(
Level.SEVERE,
null,
ex);
5471 case "typeAnimation":
5478 case "agranditSurvol":
5481 case "couleurPerso":
5484 case "nomIconeSource":
5492 if ((
HS.getStrCouleurPerso() !=
null && !
HS.getStrCouleurPerso().isEmpty()) ||
5493 (
HS.getStrNomIconeSource() !=
null && !
HS.getStrNomIconeSource().isEmpty())) {
5495 ?
HS.getStrNomIconeSource()
5496 : strNomfichierHSImage;
5520 HS.setStrInfo(
null);
5558 case "lienExterieur":
5567 HS.setStrInfo(
null);
5572 case "typeAnimation":
5579 case "agranditSurvol":
5594 case "couleurPerso":
5597 case "nomIconeSource":
5606 if ((
HS.getStrCouleurPerso() !=
null && !
HS.getStrCouleurPerso().isEmpty()) ||
5607 (
HS.getStrNomIconeSource() !=
null && !
HS.getStrNomIconeSource().isEmpty())) {
5609 ?
HS.getStrNomIconeSource()
5610 : strNomfichierHSHTML;
5665 case "fichierImage":
5699 .getName()).log(
Level.SEVERE,
null,
ex);
5725 case "directionNord":
5752 HS.setStrFichierImage(
null);
5759 HS.setStrInfo(
null);
5766 HS.setStrFichierXML(
null);
5924 .getName()).log(
Level.SEVERE,
null,
ex);
5963 System.out.println(
"⚠️ Aucun panoramique disponible dans la liste");
6061 if (
strTexte.split(
"=").length > 1) {
6099 getScnPrincipale().getStylesheets().add(
"file:///" +
f.getAbsolutePath().replace(
"\\",
"/"));
6105 .getName()).log(
Level.SEVERE,
null,
ex);
6111 getScnPrincipale().getStylesheets().add(
"file:///" +
f.getAbsolutePath().replace(
"\\",
"/"));
6124 .getName()).log(
Level.SEVERE,
null,
ex);
6132 .getName()).log(
Level.SEVERE,
null,
ex);
6139 .getName()).log(
Level.SEVERE,
null,
ex);
6190 .getName()).log(
Level.SEVERE,
null,
ex);
6221 System.err.println(
"⚠️ Fichier source introuvable, copie ignorée : " +
strFichier);
6365 "-fx-border-color: #ccc; " +
6366 "-fx-border-width: 1; " +
6367 "-fx-background-radius: 5; " +
6368 "-fx-border-radius: 5;");
6371 lblMessage.setStyle(
"-fx-font-size: 18px; " +
6372 "-fx-text-fill: #999; " +
6373 "-fx-font-weight: bold;");
6390 paneFond.setStyle(
"-fx-background-color: linear-gradient(to bottom, #e8e8e8, #d0d0d0); " +
6391 "-fx-background-radius: 10; " +
6392 "-fx-effect: dropshadow(gaussian, rgba(0,0,0,0.3), 10, 0, 0, 5);");
6401 lblTitre.setStyle(
"-fx-font-size: 16px; -fx-font-weight: bold; -fx-text-fill: #333;");
6428 "-fx-background-color: #f5f5f5; " +
6429 "-fx-border-color: #ccc; " +
6430 "-fx-border-width: 1; " +
6431 "-fx-border-radius: 5;");
6439 btnValide.setPrefWidth(120);
6440 btnValide.setPrefHeight(35);
6461 "-fx-border-color: transparent; " +
6462 "-fx-border-width: 3; " +
6463 "-fx-border-radius: 5; " +
6464 "-fx-background-radius: 5; " +
6465 "-fx-effect: dropshadow(gaussian, rgba(0,0,0,0.2), 5, 0, 0, 2);");
6470 ivPano[
i].setPreserveRatio(
true);
6473 ivPano[
i].setStyle(
"-fx-effect: null;");
6484 "-fx-border-color: #4CAF50; " +
6485 "-fx-border-width: 3; " +
6486 "-fx-border-radius: 5; " +
6487 "-fx-background-radius: 5; " +
6488 "-fx-effect: dropshadow(gaussian, #4CAF50, 8, 0.6, 0, 0);");
6490 lblPanoSelectionne.setStyle(
"-fx-font-size: 13px; -fx-text-fill: #4CAF50; -fx-font-weight: bold; -fx-padding: 5 10;");
6553 "-fx-border-color: #4CAF50; " +
6554 "-fx-border-width: 3; " +
6555 "-fx-border-radius: 5; " +
6556 "-fx-background-radius: 5; " +
6557 "-fx-effect: dropshadow(gaussian, #4CAF50, 8, 0.6, 0, 0);");
6560 "-fx-border-color: transparent; " +
6561 "-fx-border-width: 3; " +
6562 "-fx-border-radius: 5; " +
6563 "-fx-background-radius: 5; " +
6564 "-fx-effect: dropshadow(gaussian, rgba(0,0,0,0.2), 5, 0, 0, 2);");
6570 lblPanoSelectionne.setStyle(
"-fx-font-size: 13px; -fx-text-fill: #4CAF50; -fx-font-weight: bold; -fx-padding: 5 10;");
6573 btnValide.setDisable(
false);
6580 "-fx-border-color: #2196F3; " +
6581 "-fx-border-width: 3; " +
6582 "-fx-border-radius: 5; " +
6583 "-fx-background-radius: 5; " +
6584 "-fx-effect: dropshadow(gaussian, rgba(0,0,0,0.3), 7, 0, 0, 3);");
6591 "-fx-border-color: transparent; " +
6592 "-fx-border-width: 3; " +
6593 "-fx-border-radius: 5; " +
6594 "-fx-background-radius: 5; " +
6595 "-fx-effect: dropshadow(gaussian, rgba(0,0,0,0.2), 5, 0, 0, 2);");
6612 btnValide.setLayoutX(550);
6613 btnValide.setLayoutY(733);
6614 btnValide.setStyle(
"-fx-background-color: #4CAF50; " +
6615 "-fx-text-fill: white; " +
6616 "-fx-font-size: 14px; " +
6617 "-fx-font-weight: bold; " +
6618 "-fx-background-radius: 5; " +
6619 "-fx-cursor: hand;");
6620 btnValide.setOnMouseEntered(
e -> btnValide.setStyle(
"-fx-background-color: #45a049; " +
6621 "-fx-text-fill: white; " +
6622 "-fx-font-size: 14px; " +
6623 "-fx-font-weight: bold; " +
6624 "-fx-background-radius: 5; " +
6625 "-fx-cursor: hand;"));
6626 btnValide.setOnMouseExited(
e -> btnValide.setStyle(
"-fx-background-color: #4CAF50; " +
6627 "-fx-text-fill: white; " +
6628 "-fx-font-size: 14px; " +
6629 "-fx-font-weight: bold; " +
6630 "-fx-background-radius: 5; " +
6631 "-fx-cursor: hand;"));
6632 paneFond.getChildren().add(btnValide);
6633 btnValide.setOnMouseClicked((
mouseEvent) -> {
6650 longitude = longitude % 360;
6651 longitude = longitude < 0 ? longitude + 360 : longitude;
6652 longitude = longitude > 180 ? longitude - 360 : longitude;
6668 btnAnnuler.setPrefWidth(120);
6669 btnAnnuler.setPrefHeight(35);
6670 btnAnnuler.setLayoutX(660);
6671 btnAnnuler.setLayoutY(733);
6672 btnAnnuler.setStyle(
"-fx-background-color: #f44336; " +
6673 "-fx-text-fill: white; " +
6674 "-fx-font-size: 14px; " +
6675 "-fx-font-weight: bold; " +
6676 "-fx-background-radius: 5; " +
6677 "-fx-cursor: hand;");
6678 btnAnnuler.setOnMouseEntered(
e -> btnAnnuler.setStyle(
"-fx-background-color: #da190b; " +
6679 "-fx-text-fill: white; " +
6680 "-fx-font-size: 14px; " +
6681 "-fx-font-weight: bold; " +
6682 "-fx-background-radius: 5; " +
6683 "-fx-cursor: hand;"));
6684 btnAnnuler.setOnMouseExited(
e -> btnAnnuler.setStyle(
"-fx-background-color: #f44336; " +
6685 "-fx-text-fill: white; " +
6686 "-fx-font-size: 14px; " +
6687 "-fx-font-weight: bold; " +
6688 "-fx-background-radius: 5; " +
6689 "-fx-cursor: hand;"));
6690 btnAnnuler.setOnMouseClicked((
mouseEvent) -> {
6716 paneFond.getChildren().add(btnAnnuler);
6723 btnClose.setStyle(
"-fx-background-color: transparent; " +
6724 "-fx-text-fill: #999; " +
6725 "-fx-font-size: 24px; " +
6726 "-fx-font-weight: bold; " +
6727 "-fx-cursor: hand;");
6728 btnClose.setOnMouseEntered(
e ->
btnClose.setStyle(
"-fx-background-color: #f44336; " +
6729 "-fx-text-fill: white; " +
6730 "-fx-font-size: 24px; " +
6731 "-fx-font-weight: bold; " +
6732 "-fx-background-radius: 15; " +
6733 "-fx-cursor: hand;"));
6734 btnClose.setOnMouseExited(
e ->
btnClose.setStyle(
"-fx-background-color: transparent; " +
6735 "-fx-text-fill: #999; " +
6736 "-fx-font-size: 24px; " +
6737 "-fx-font-weight: bold; " +
6738 "-fx-cursor: hand;"));
6793 cbPanos.getSelectionModel().getSelectedIndex()
6876 if (imageSource ==
null) {
6877 System.err.println(
"⚠️ transformerCouleurHotspot: imageSource est null");
6881 int width = (
int) imageSource.getWidth();
6882 int height = (
int) imageSource.getHeight();
6886 System.err.println(
"⚠️ transformerCouleurHotspot: dimensions invalides (width=" +
width +
", height=" +
height +
")");
6940 if (
image ==
null) {
7024 System.out.println(
"🔍 DEBUG reconstruireIconeHotspot:");
7037 System.err.println(
"⚠️ Fichier icône introuvable: " +
fileIcone.getAbsolutePath());
7137 if (
c1.getFill() ==
Color.RED) {
7159 paneHsPanoramique.setStyle(
"-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;");
7164 lblPoint.getStyleClass().add(
"titreOutil");
7183 cbDestPano.getSelectionModel().selectedIndexProperty().addListener((
ov,
t,
t1) -> {
7241 System.out.println(
"🎨 DEBUG aperçu HS #" +
io +
":");
7243 System.out.println(
" - strNomfichierHS: " + strNomfichierHS);
7317 lblBtnPerso.setStyle(
"-fx-font-size: 14px; -fx-font-weight: bold;");
7335 javafx.application.Platform.runLater(() -> {
7480 System.out.println(
"=== DEBUG Hotspot #" +
io +
" ===");
7488 System.out.println(
"Image source récupérée depuis le hotspot (stockée en mémoire)");
7499 System.out.println(
"Image personnalisée chargée: " +
filePerso.getAbsolutePath() +
" (" +
imgTemp.getWidth() +
"x" +
imgTemp.getHeight() +
")");
7503 System.err.println(
"⚠️ Image personnalisée invalide: " +
filePerso.getAbsolutePath() +
" (error=" +
imgTemp.isError() +
", w=" +
imgTemp.getWidth() +
", h=" +
imgTemp.getHeight() +
")");
7506 System.out.println(
"Fichier personnalisé introuvable: " +
filePerso.getAbsolutePath());
7509 System.err.println(
"Erreur chargement image personnalisée: " +
e.getMessage());
7526 System.err.println(
"⚠️ Image par défaut invalide: " +
fileHotspot.getAbsolutePath() +
" (error=" +
imgTemp.isError() +
", w=" +
imgTemp.getWidth() +
", h=" +
imgTemp.getHeight() +
")");
7529 System.err.println(
"⚠️ Fichier hotspot par défaut introuvable: " +
fileHotspot.getAbsolutePath());
7532 System.err.println(
"Erreur chargement image par défaut: " +
e.getMessage());
7533 e.printStackTrace();
7570 System.err.println(
"⚠️ Impossible de transformer la couleur de l'icône hotspot #" +
io);
7573 System.err.println(
"⚠️ Image hotspot original null pour hotspot #" +
io);
7579 System.out.println(
"\n=== Changement couleur Hotspot #" +
iNumHS +
" ===");
7585 System.out.println(
"Fichier image dans hotspot AVANT changement: '" +
fichierActuel +
"'");
7591 System.out.println(
"Image source pour transformation: " + (
imgSourceDuHotspot !=
null ?
"Image du hotspot" :
"NULL"));
7617 System.out.println(
"Nom fichier stocké dans hotspot #" +
iNumHS);
7621 System.out.println(
"Vérification immédiate - Fichier dans hotspot APRES: '" +
verification +
"'");
7623 System.err.println(
"ERREUR: Nom de fichier NULL!");
7650 System.out.println(
"\n=== Sélection nouvelle icône Hotspot #" +
iNumHotspot +
" ===");
7660 System.err.println(
"⚠️ Fichier source introuvable : " +
fileChoisi.getAbsolutePath());
7719 System.err.println(
"ERREUR: Nom de fichier NULL après sauvegarde!");
7722 System.err.println(
"ERREUR lors du traitement de l'icône: ");
7723 ex.printStackTrace();
7762 if (
c1.getFill() ==
Color.BLUE) {
7785 paneHsImage.setStyle(
"-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;");
7789 lblPoint.getStyleClass().add(
"titreOutil");
7791 sepHS.setPrefWidth(351);
7792 sepHS.setTranslateX(2);
7888 System.out.println(
"🎨 DEBUG aperçu HotspotImage #" +
io +
":");
7890 System.out.println(
" - strNomfichierHSImage: " + strNomfichierHSImage);
7908 System.out.println(
"Image source stockée dans objet HotspotImage #" +
io);
7984 cpCouleurFond.setTranslateX(100);
7986 cpCouleurFond.valueProperty().addListener((
ov,
av,
nv) -> {
7994 slOpacite.valueProperty().addListener((
ov,
av,
nv) -> {
8001 slOpacite.setTranslateX(100);
8002 slOpacite.setPrefWidth(130);
8003 slOpacite.setMinWidth(130);
8004 slOpacite.setMaxWidth(130);
8025 if (
c1.getFill() ==
Color.DARKGREEN) {
8026 c1.setFill(
Color.YELLOWGREEN);
8027 c1.setStroke(
Color.DARKGREEN);
8030 c1.setStroke(
Color.YELLOWGREEN);
8044 c1.setStroke(
Color.YELLOWGREEN);
8047 paneHsHtml.setStyle(
"-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;");
8051 lblPoint.getStyleClass().add(
"titreOutil");
8053 sepHS.setPrefWidth(351);
8054 sepHS.setTranslateX(2);
8136 System.out.println(
"🎨 DEBUG aperçu HotspotHTML #" +
io +
":");
8138 System.out.println(
" - strNomfichierHSHTML: " + strNomfichierHSHTML);
8156 System.out.println(
"Image source stockée dans objet HotspotHTML #" +
io);
8224 .setOnAction((
e) -> {
8232 editHTML.addPropertyChangeListener(
"bValide", (
ev) -> {
8233 if (
ev.getNewValue().toString().equals(
"true")) {
8261 if (
c1.getFill() ==
Color.TURQUOISE) {
8263 c1.setStroke(
Color.TURQUOISE);
8283 paneHsDiapo.setStyle(
"-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;");
8287 lblPoint.getStyleClass().add(
"titreOutil");
8289 sepHS.setPrefWidth(321);
8290 sepHS.setTranslateX(2);
8313 cbListeDiapo.getSelectionModel().selectedIndexProperty().addListener((
ov,
av,
nv) -> {
8363 spLegende.getStyleClass().add(
"legendePane");
8373 Circle
circPoint =
new Circle(30, 20, 5);
8414 lblHS.setLayoutX(50);
8415 lblHS.setLayoutY(15);
8422 lblNord.setLayoutX(520);
8423 lblNord.setLayoutY(55);
8450 private static void afficheHS(
int i,
double longitude,
double latitude) {
8454 double Y = (90.0d - latitude) *
hauteur / 180.0
d;
8588 double Y = (90.0d - latitude) *
hauteur / 180.0
d;
8718 .getName()).log(
Level.SEVERE,
null,
ex);
8745 double Y = (90.0d - latitude) *
hauteur / 180.0
d;
8893 double Y = (90.0d - latitude) *
hauteur / 180.0
d;
9002 editHTML.addPropertyChangeListener(
"bValide", (
ev) -> {
9003 if (
ev.getNewValue().toString().equals(
"true")) {
9157 double YY =
me1.getY();
9161 double X1 =
me1.getSceneX();
9188 private static void affichePoV(
double longitude,
double latitude,
double fov) {
9191 double Y = (90.0d - latitude) *
largeur / 360.0
d;
9295 double longitude, latitude;
9311 HS.setLongitude(longitude);
9312 HS.setLatitude(latitude);
9467 double longitude, latitude;
9498 HS.setLongitude(longitude);
9499 HS.setLatitude(latitude);
9514 .getName()).log(
Level.SEVERE,
null,
ex);
9653 .getName()).log(
Level.SEVERE,
null,
ex);
9685 double longitude, latitude;
9702 HS.setLongitude(longitude);
9703 HS.setLatitude(latitude);
9712 editHTML.addPropertyChangeListener(
"bValide", (
e) -> {
9713 if (
e.getNewValue().toString().equals(
"true")) {
9724 editHTML.addPropertyChangeListener(
"bAnnule", (
e) -> {
9725 if (
e.getNewValue().toString().equals(
"true")) {
9835 editHTML1.addPropertyChangeListener(
"bValide", (
ev) -> {
9836 if (
ev.getNewValue().toString().equals(
"true")) {
9870 double longitude, latitude;
9885 HS.setLongitude(longitude);
9886 HS.setLatitude(latitude);
9893 dialog.setHeaderText(
null);
9897 if (
result.isPresent()) {
10113 case "Panoramique":
10212 if (clavierEvt.getText().toLowerCase().equals(
"l")) {
10213 clavierEvt.consume();
10214 setAfficheLoupe(!isAfficheLoupe());
10215 apLoupe.setVisible(isAfficheLoupe());
10216 Point p = MouseInfo.getPointerInfo().getLocation();
10217 if (p.x < getiTailleLoupe() + 80 && p.y < getiTailleLoupe() + 160) {
10218 apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5);
10219 apLoupe.setLayoutY(35);
10220 strPositLoupe =
"droite";
10222 apLoupe.setLayoutX(35);
10223 apLoupe.setLayoutY(35);
10224 strPositLoupe =
"gauche";
10229 setiTailleLoupe(getiTailleLoupe() + 10);
10231 afficheLoupe(positLoupeX, positLoupeY);
10234 setiTailleLoupe(getiTailleLoupe() - 10);
10236 afficheLoupe(positLoupeX, positLoupeY);
10272 double longitude, latitude;
10301 double largeur = ivImagePanoramique.getFitWidth();
10306 for (
int i = -180;
i < 180;
i += 10) {
10316 if ((
i % 20) == 0) {
10326 for (
int i = -90;
i < 90;
i += 10) {
10335 if ((
i % 20) == 0) {
10358 panePanoramique.getChildren().remove(
nodeLigne);
10368 apLoupe.getChildren().clear();
10369 if (strPositLoupe.equals(
"gauche")) {
10370 apLoupe.setLayoutX(35);
10372 if (strPositLoupe.equals(
"droite")) {
10373 apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5);
10375 apLoupe.setLayoutY(35);
10377 Line lig1 =
new Line(getiTailleLoupe() / 2 + 10, 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() + 10);
10379 Line lig2 =
new Line(10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() + 10, getiTailleLoupe() / 2 + 10);
10381 Circle
circ1 =
new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 6);
10384 Circle
circ2 =
new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 5);
10387 Circle
circ3 =
new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 2);
10390 Circle
circ4 =
new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2);
10394 apLoupe.setOnMouseMoved((
me) -> {
10395 if (strPositLoupe.equals(
"gauche")) {
10396 apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5);
10397 strPositLoupe =
"droite";
10399 if (strPositLoupe.equals(
"droite")) {
10400 apLoupe.setLayoutX(35);
10401 strPositLoupe =
"gauche";
10404 apLoupe.setOnMouseEntered((
me) -> {
10405 if (strPositLoupe.equals(
"gauche")) {
10406 apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5);
10407 strPositLoupe =
"droite";
10409 if (strPositLoupe.equals(
"droite")) {
10410 apLoupe.setLayoutX(35);
10411 strPositLoupe =
"gauche";
10423 ivImagePanoramique.setImage(getPanoramiquesProjet()[
iNumPanochoisi].getImgPanoramique());
10426 retireAffichagePointsHotSpots();
10427 retireAffichageHotSpots();
10428 retireAffichageLigne();
10432 ivLoupe.setImage(getPanoramiquesProjet()[
iNumPanochoisi].getImgCubeEqui());
10436 ivLoupe.setSmooth(
true);
10437 ivLoupe.setPreserveRatio(
true);
10438 ivLoupe.setFitWidth(8000);
10440 ivLoupe.setClip(
new Circle(4000, 2000, getiTailleLoupe() / 2));
10441 ivLoupe.setLayoutX(-4000 + getiTailleLoupe() / 2 + 10);
10442 ivLoupe.setLayoutY(-2000 + getiTailleLoupe() / 2 + 10);
10443 apLoupe.setPrefSize(getiTailleLoupe() + 20, getiTailleLoupe() + 20);
10444 apLoupe.setMinSize(getiTailleLoupe() + 20, getiTailleLoupe() + 20);
10445 apLoupe.setMaxSize(getiTailleLoupe() + 20, getiTailleLoupe() + 20);
10448 panePanoramique.setOnMouseEntered((
me) -> {
10449 if (isAfficheLoupe()) {
10450 apLoupe.setVisible(
true);
10453 panePanoramique.setOnMouseExited((
me) -> {
10454 apLoupe.setVisible(
false);
10457 if (navigateurPanoramique ==
null) {
10466 apVisuPanoramique.getChildren().clear();
10474 navigateurPanoramique
10493 bPleinEcranPanoramique =
true;
10498 for (
int i = 0;
i < getPanoramiquesProjet().length;
i++) {
10499 if (getPanoramiquesProjet()[
i] !=
null &&
10500 getPanoramiquesProjet()[
i].getStrNomFichier() !=
null &&
10501 getPanoramiquesProjet()[
i].getStrNomFichier().equals(
nomFichierVisu)) {
10512 System.out.println(
"🔍 DEBUG: Passage en plein écran");
10515 System.out.println(
" getiPanoActuel() = " + getiPanoActuel());
10531 System.out.println(
"📸 Utilisation de l'image haute résolution pré-chargée");
10535 System.out.println(
"📸 Cache HR non disponible, chargement à la volée...");
10560 System.out.println(
"🎨 Activation du mode haute qualité...");
10561 System.out.println(
" Équirectangulaire: 3000x1500");
10562 System.out.println(
" Faces du cube: 1000x1000");
10574 if (
navigPopup.getBtnPleinEcran() !=
null) {
10575 navigPopup.getBtnPleinEcran().setVisible(
false);
10576 navigPopup.getBtnPleinEcran().setManaged(
false);
10590 bPleinEcranPanoramique =
false;
10603 bPleinEcranPanoramique =
false;
10608 double longitude =
Math.round(
Double.parseDouble(
e.getNewValue().toString()) * 10) / 10.d - 180;
10609 longitude = longitude % 360;
10610 longitude = longitude < 0 ? longitude + 360 : longitude;
10611 longitude = longitude > 180 ? longitude - 360 : longitude;
10612 getPanoramiquesProjet()[getiPanoActuel()].setZeroNord(longitude);
10613 afficheNord(longitude);
10618 double fov =
Math.round(navigateurPanoramique.
getChoixFov() * 10) / 10.d;
10619 longitude = longitude % 360;
10620 longitude = longitude < 0 ? longitude + 360 : longitude;
10621 longitude = longitude > 180 ? longitude - 360 : longitude;
10623 getPanoramiquesProjet()[getiPanoActuel()].setRegardX(longitude);
10624 getPanoramiquesProjet()[getiPanoActuel()].setRegardY(latitude);
10625 getPanoramiquesProjet()[getiPanoActuel()].setChampVisuel(fov);
10626 affichePoV(longitude, latitude, fov);
10631 double fov =
Math.round(navigateurPanoramique.
getChoixFov() * 10) / 10.d;
10632 longitude = longitude % 360;
10633 longitude = longitude < 0 ? longitude + 360 : longitude;
10634 longitude = longitude > 180 ? longitude - 360 : longitude;
10635 getPanoramiquesProjet()[getiPanoActuel()].setRegardX(longitude);
10636 getPanoramiquesProjet()[getiPanoActuel()].setRegardY(latitude);
10637 getPanoramiquesProjet()[getiPanoActuel()].setChampVisuel(fov);
10638 affichePoV(longitude, latitude, fov);
10643 double fov =
Math.round(navigateurPanoramique.
getChoixFov() * 10) / 10.d;
10644 longitude = longitude % 360;
10645 longitude = longitude < 0 ? longitude + 360 : longitude;
10646 longitude = longitude > 180 ? longitude - 360 : longitude;
10647 getPanoramiquesProjet()[getiPanoActuel()].setRegardX(longitude);
10648 getPanoramiquesProjet()[getiPanoActuel()].setRegardY(latitude);
10649 getPanoramiquesProjet()[getiPanoActuel()].setChampVisuel(fov);
10650 affichePoV(longitude, latitude, fov);
10659 apVisuPanoramique.getChildren().addAll(apVisuPano);
10660 navigateurPanoramique.
affiche();
10665 getPanoramiquesProjet()[
iNumPanochoisi].getImgVisuPanoramique(),
10672 navigateurPanoramique.
affiche();
10674 if (getPanoramiquesProjet()[
iNumPanochoisi].getMarqueurGeolocatisation() !=
null) {
10677 getPoGeolocalisation().setbValide(
true);
10679 if (isbInternet()) {
10680 tfLatitude.setText(
"");
10681 tfLongitude.setText(
"");
10682 getPoGeolocalisation().setbValide(
false);
10686 ajouteAffichagePointsHotspots();
10687 ajouteAffichagePointsHotspotsImage();
10688 ajouteAffichagePointsHotspotsHTML();
10689 ajouteAffichagePointsHotspotsDiapo();
10691 ajouteAffichageHotspots();
10693 afficheNord(getPanoramiquesProjet()[
iNumPanochoisi].getZeroNord());
10694 ajouteAffichageLignes();
10696 cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(getiPanoActuel()));
10705 rectVignettePano.setLayoutY((iLargeurVignettes / 2 + 10) *
iPano + 10);
10706 rectVignettePano.setVisible(
true);
10707 cbMinLat.setSelected(getPanoramiquesProjet()[
iNumPanochoisi].isbMinLat());
10708 cbMaxLat.setSelected(getPanoramiquesProjet()[
iNumPanochoisi].isbMaxLat());
10709 if (cbMinLat.isSelected()) {
10710 slMinLat.setValue(getPanoramiquesProjet()[
iNumPanochoisi].getMinLat());
10712 slMinLat.setValue(-90);
10714 if (cbMaxLat.isSelected()) {
10715 slMaxLat.setValue(getPanoramiquesProjet()[
iNumPanochoisi].getMaxLat());
10717 slMaxLat.setValue(90);
10719 slMinFov.setValue(getPanoramiquesProjet()[
iNumPanochoisi].getFovMin());
10720 slMaxFov.setValue(getPanoramiquesProjet()[
iNumPanochoisi].getFovMax());
10724 double X11 = ivImagePanoramique.getLayoutX();
10726 ligNadir.setStartX(
X11);
10727 ligNadir.setStartY(
Y1);
10729 ligNadir.setEndY(
Y1);
10731 ligZenith.setStartX(
X11);
10732 ligZenith.setStartY(
Y1);
10734 ligZenith.setEndY(
Y1);
10736 panePanoramique.getChildren().remove(ligNadir);
10737 panePanoramique.getChildren().remove(ligZenith);
10738 panePanoramique.getChildren().addAll(ligNadir, ligZenith);
10745 TextField
tfTitrePano = (TextField) getScnPrincipale().lookup(
"#txttitrepano");
10746 if (getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique() !=
null) {
10747 tfTitrePano.setText(getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique());
10755 if (getPanoramiquesProjet()[getiPanoActuel()].getStrDescriptionIA() !=
null) {
10756 taDescriptionIA.setText(getPanoramiquesProjet()[getiPanoActuel()].getStrDescriptionIA());
10763 if (getGestionnaireInterface().getCbAfficheDescription() !=
null) {
10765 getGestionnaireInterface().setbChargementEnCours(
true);
10767 boolean bAffDesc = getPanoramiquesProjet()[getiPanoActuel()].isAffDescription();
10769 getGestionnaireInterface().getCbAfficheDescription().setSelected(
bAffDesc);
10770 getGestionnaireInterface().setbAfficheDescription(
bAffDesc);
10773 if (getGestionnaireInterface().getPoDescription() !=
null) {
10774 getGestionnaireInterface().getPoDescription().setbValide(
bAffDesc);
10778 getGestionnaireInterface().setbChargementEnCours(
false);
10790 alert.setTitle(rbLocalisation.getString(
"main.descriptionIAOllamaIndisponible"));
10791 alert.setHeaderText(rbLocalisation.getString(
"main.descriptionIAOllamaIndisponible"));
10792 alert.setContentText(rbLocalisation.getString(
"main.descriptionIAOllamaIndisponibleMsg"));
10793 alert.showAndWait();
10799 TextField
tfVisite = (TextField) getVbChoixPanoramique().lookup(
"#titreVisite");
10806 String longitude =
null;
10818 boolean hasCoords = latitude !=
null && longitude !=
null;
10822 alert.setTitle(rbLocalisation.getString(
"main.descriptionIADonneesManquantes"));
10823 alert.setHeaderText(rbLocalisation.getString(
"main.descriptionIADonneesManquantes"));
10824 alert.setContentText(rbLocalisation.getString(
"main.descriptionIADonneesManquantesMsg"));
10825 alert.showAndWait();
10844 System.out.println(
"[DEBUG] Sauvegarde description IA pour pano " + getiPanoActuel());
10846 getPanoramiquesProjet()[getiPanoActuel()].setStrDescriptionIA(
description);
10847 String verif = getPanoramiquesProjet()[getiPanoActuel()].getStrDescriptionIA();
10848 System.out.println(
"[DEBUG] Vérification après set (longueur: " +
verif.length() +
"): '" +
verif.substring(0,
Math.min(100,
verif.length())) +
"...'");
10849 setbDejaSauve(
false);
10850 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
10860 alert.setTitle(rbLocalisation.getString(
"main.descriptionIAErreur"));
10861 alert.setHeaderText(rbLocalisation.getString(
"main.descriptionIAErreur"));
10862 alert.setContentText(
ex.getMessage());
10863 alert.showAndWait();
10905 bPanoCharge =
true;
10911 jpegFile =
new File(getStrRepertAppli() +
File.separator +
"images" +
File.separator +
"pasImage.jpg");
10921 System.out.println(
"> tag: " +
tag.getTagName() +
" = " +
tag.getDescription());
10931 lblNiveaux.setText(
"Création visualisation panoramique");
10932 pbarAvanceChargement.setProgress((
double) (
iNumero - 1) / (
double)
iTotal + 0.666 /
iTotal);
10962 .getName()).log(
Level.SEVERE,
null,
ex);
10965 imgPanoRetaille2 =
new Image(
"file:" +
jpegFile.getAbsolutePath(), 1200, 600,
true,
true,
true);
10975 panoCree.setImgVisuPanoramique(imgTransformationImage(
new Image(
"file:" +
jpegFile.getAbsolutePath()), 2));
10979 System.out.println(
"🚀 Pré-calcul pour le nouveau panorama " + getiNombrePanoramiques());
10983 System.out.println(
" 📸 Pré-chargement image haute résolution...");
10988 System.out.println(
" 📦 Calcul des faces 500×500...");
10993 System.out.println(
" 📦 Calcul des faces 1000×1000...");
10996 System.out.println(
" ✅ Pré-calcul terminé");
10998 panoCree.setImgPanoramique(imgPanoRetaille2);
11043 .getName()).log(
Level.SEVERE,
null,
ex);
11053 lblNiveaux.setText(
"Création visualisation panoramique");
11054 pbarAvanceChargement.setProgress(((
double) (
iNumero - 1) + 1.
d / 3.
d) /
iTotal);
11060 pbarAvanceChargement.setProgress(((
double) (
iNumero - 1) + 4.
d / 9.
d) / (
double)
iTotal);
11063 iCreeNiveauxImageCube(
strNom +
"_d." +
strExtension, getStrRepertPanos(), getiNombrePanoramiques(),
"dessous");
11065 pbarAvanceChargement.setProgress(((
double) (
iNumero - 1) + 5.
d / 9.
d) / (
double)
iTotal);
11067 iCreeNiveauxImageCube(
strNom +
"_l." +
strExtension, getStrRepertPanos(), getiNombrePanoramiques(),
"gauche");
11069 pbarAvanceChargement.setProgress(((
double) (
iNumero - 1) + 2.
d / 3.
d) / (
double)
iTotal);
11072 iCreeNiveauxImageCube(
strNom +
"_r." +
strExtension, getStrRepertPanos(), getiNombrePanoramiques(),
"droite");
11074 pbarAvanceChargement.setProgress(((
double) (
iNumero - 1) + 7.
d / 9.
d) / (
double)
iTotal);
11077 iCreeNiveauxImageCube(
strNom +
"_f." +
strExtension, getStrRepertPanos(), getiNombrePanoramiques(),
"devant");
11079 pbarAvanceChargement.setProgress(((
double) (
iNumero - 1) + 8.
d / 9.
d) / (
double)
iTotal);
11082 iCreeNiveauxImageCube(
strNom +
"_b." +
strExtension, getStrRepertPanos(), getiNombrePanoramiques(),
"derriere");
11084 pbarAvanceChargement.setProgress(((
double) (
iNumero)) / (
double)
iTotal);
11110 panoCree.setStrTitrePanoramique(
"");
11111 getPanoramiquesProjet()[getiNombrePanoramiques()] =
panoCree;
11112 setiPanoActuel(getiNombrePanoramiques());
11113 setiNombrePanoramiques(getiNombrePanoramiques() + 1);
11119 bPanoCharge =
true;
11124 imageFile =
new File(getStrRepertAppli() +
File.separator +
"images" +
File.separator +
"pasImage.jpg");
11138 System.out.println(
"> tag: " +
tag.getTagName() +
" = " +
tag.getDescription());
11146 getPanoramiquesProjet()[getiPanoActuel()].setStrNomFichier(
strFichierPano);
11147 int iNum = getiPanoActuel();
11175 .getName()).log(
Level.SEVERE,
null,
ex);
11178 imgPanoRetaille2 =
new Image(
"file:" +
imageFile.getAbsolutePath(), 1200, 600,
true,
true,
true);
11189 getPanoramiquesProjet()[getiPanoActuel()].setImgVisuPanoramique(imgTransformationImage(
new Image(
"file:" +
imageFile.getAbsolutePath()), 2));
11191 getPanoramiquesProjet()[getiPanoActuel()].setImgPanoramique(imgPanoRetaille2);
11192 getPanoramiquesProjet()[getiPanoActuel()].setNombreNiveaux(
iNombreNiveaux);
11193 getPanoramiquesProjet()[getiPanoActuel()].setImgVignettePanoramique(
imgPano3);
11194 getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRect(
imgPano4);
11195 getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRectListe(
imgPano5);
11198 System.out.println(
"🚀 Pré-calcul pour le panorama " + getiPanoActuel());
11202 System.out.println(
" 📸 Pré-chargement image haute résolution...");
11204 getPanoramiquesProjet()[getiPanoActuel()].setImgHauteResolution(
imgHauteRes);
11209 getPanoramiquesProjet()[getiPanoActuel()].setCubeFacesPetiteResolution(
cubesPetits);
11210 System.out.println(
" ✅ Cube 500×500 pré-calculé et stocké");
11212 System.err.println(
" ⚠️ Échec pré-calcul cube 500×500");
11218 getPanoramiquesProjet()[getiPanoActuel()].setCubeFacesGrandeResolution(
cubesGrands);
11219 System.out.println(
" ✅ Cube 1000×1000 pré-calculé et stocké");
11221 System.err.println(
" ⚠️ Échec pré-calcul cube 1000×1000");
11224 getPanoramiquesProjet()[getiPanoActuel()].setStrTypePanoramique(
Panoramique.
SPHERE);
11227 getPanoramiquesProjet()[getiPanoActuel()].setStrNomFichier(
strFichierPano);
11263 .getName()).log(
Level.SEVERE,
null,
ex);
11272 getPanoramiquesProjet()[getiPanoActuel()].setImgVisuPanoramique(imgTransformationImage(
imgEquiRectangulaire2, 1));
11273 int iNum = getiPanoActuel();
11292 getPanoramiquesProjet()[getiPanoActuel()].setNombreNiveaux(
iNombreNiveaux);
11293 getPanoramiquesProjet()[getiPanoActuel()].setImgVignettePanoramique(
imgPano3);
11294 getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRect(
imgPano4);
11295 getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRectListe(
imgPano5);
11296 getPanoramiquesProjet()[getiPanoActuel()].setStrTypePanoramique(
Panoramique.
CUBE);
11311 .getName()).log(
Level.SEVERE,
null,
ex);
11325 .getName()).log(
Level.SEVERE,
null,
ex);
11405 alert.setTitle(rbLocalisation.getString(
"main.dialog.sauveModele"));
11406 alert.setHeaderText(
null);
11407 alert.setContentText(rbLocalisation.getString(
"main.dialog.sauveModeleMessage"));
11408 alert.showAndWait();
11434 getGestionnaireInterface().setbTemplate(
true);
11436 boolean bSauve = isbDejaSauve();
11437 getGestionnaireInterface().afficheTemplate();
11440 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
""));
11442 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
11444 getGestionnaireInterface().setbTemplate(
false);
11448 .getName()).log(
Level.SEVERE,
null,
ex);
11465 for (
int i = 0;
i <
points.size();
i += 2) {
11513 cercle.setCenterX((
double)
x);
11523 cercle.setCenterY((
double)
y);
11563 double dX = -
rect.getX() + (
double)
x;
11564 rect.setX((
double)
x);
11567 +
"," +
Math.round(
rect.getY() * 10) / 10
11568 +
"," +
Math.round((
rect.getX() +
rect.getWidth()) * 10) / 10
11569 +
"," +
Math.round((
rect.getY() +
rect.getHeight()) * 10) / 10;
11575 rect.setY((
double)
y);
11578 +
"," +
Math.round(
rect.getY() * 10) / 10
11579 +
"," +
Math.round((
rect.getX() +
rect.getWidth()) * 10) / 10
11580 +
"," +
Math.round((
rect.getY() +
rect.getHeight()) * 10) / 10;
11584 rect.setWidth((
double)
x -
rect.getX());
11586 +
"," +
Math.round(
rect.getY() * 10) / 10
11587 +
"," +
Math.round((
rect.getX() +
rect.getWidth()) * 10) / 10
11588 +
"," +
Math.round((
rect.getY() +
rect.getHeight()) * 10) / 10;
11593 rect.setHeight((
double)
y -
rect.getY());
11595 +
"," +
Math.round(
rect.getY() * 10) / 10
11596 +
"," +
Math.round((
rect.getX() +
rect.getWidth()) * 10) / 10
11597 +
"," +
Math.round((
rect.getY() +
rect.getHeight()) * 10) / 10;
11617 zones[
ij] = zones[
ij + 1];
11623 apZoneBarrePersonnalisee.getChildren().clear();
11630 for (
int i = 0;
i < strTouchesBarre.length;
i++) {
11639 for (
int ij = 0;
ij < strCodeBarre.length;
ij++) {
11651 protected void updateItem(String item, boolean empty) {
11652 super.updateItem(item, empty);
11653 if (empty || item == null) {
11668 protected void updateItem(String item, boolean empty) {
11669 super.updateItem(item, empty);
11670 if (empty || item == null) {
11715 apZoneBarrePersonnalisee.getChildren()
11717 switch (
zone.getStrTypeZone()) {
11720 poly.setFill(
Color.rgb(255, 0, 0, 0.5));
11722 apImgBarrePersonnalisee.getChildren().addAll(olCreeAncresPourPolygone(
iNumeroZone,
poly.getPoints()));
11726 rect.setFill(
Color.rgb(255, 0, 0, 0.5));
11728 apImgBarrePersonnalisee.getChildren().addAll(olCreeAncresPourRectangle(
iNumeroZone,
rect));
11731 Circle
cercle = (Circle) apImgBarrePersonnalisee.lookup(
"#" + strIdZone);
11734 apImgBarrePersonnalisee.getChildren().addAll(olCreeAncresPourCercle(
iNumeroZone,
cercle));
11750 apImgBarrePersonnalisee.getChildren().clear();
11751 apZoneBarrePersonnalisee.getChildren().clear();
11753 apImgBarrePersonnalisee.getChildren().add(ivBarrePersonnalisee);
11754 apImgBarrePersonnalisee.setPrefWidth(imgBarrePersonnalisee.getWidth());
11755 apImgBarrePersonnalisee.setPrefHeight(imgBarrePersonnalisee.getHeight());
11756 apImgBarrePersonnalisee.setCursor(
Cursor.CROSSHAIR);
11757 apImgBarrePersonnalisee.setLayoutX((
iLargeur - 300 - apImgBarrePersonnalisee.getPrefWidth()) / 2.d);
11758 apImgBarrePersonnalisee.setLayoutY((
iHauteur - apImgBarrePersonnalisee.getPrefHeight()) / 2.d);
11760 for (
int i = 0;
i < iNombreZones;
i++) {
11767 final String strIdZone =
zone.getStrTypeZone() +
"-" +
i;
11769 switch (
zone.getStrTypeZone()) {
11775 apImgBarrePersonnalisee.getChildren().add(
cercle);
11776 cercle.setId(strIdZone);
11777 cercle.setOnMouseClicked((
t) -> {
11786 rect.setFill(
Color.rgb(255, 255, 0, 0.5));
11789 apImgBarrePersonnalisee.getChildren().add(
rect);
11790 rect.setId(strIdZone);
11791 rect.setOnMouseClicked((
t) -> {
11798 poly.setFill(
Color.rgb(255, 255, 0, 0.5));
11800 poly.setStrokeWidth(3);
11803 poly.setId(strIdZone);
11804 apImgBarrePersonnalisee.getChildren().add(
poly);
11805 poly.setOnMouseClicked((
t) -> {
11822 if (iNombreZones == -1) {
11826 strTypeZone =
"poly";
11827 zone.setStrTypeZone(strTypeZone);
11828 iNombrePointsZone = 0;
11829 bRecommenceZone =
false;
11830 apZoneBarrePersonnalisee.getChildren().clear();
11831 apZoneBarrePersonnalisee.getStyleClass().add(
"dialog-content-pane");
11834 Button btnAnnuler =
new Button(rbLocalisation.getString(
"main.annuler"),
new ImageView(
new Image(
"file:" + getStrRepertAppli() +
"/images/annule.png")));
11835 Button btnValider =
new Button(rbLocalisation.getString(
"main.valider"),
new ImageView(
new Image(
"file:" + getStrRepertAppli() +
"/images/valide.png")));
11837 btnValider.setLayoutX(175);
11838 btnValider.setLayoutY(235);
11839 btnValider.setPrefWidth(140);
11840 btnValider.setPrefHeight(35);
11842 btnAnnuler.setLayoutX(20);
11843 btnAnnuler.setLayoutY(235);
11844 btnAnnuler.setPrefWidth(140);
11845 btnAnnuler.setPrefHeight(35);
11882 for (
int i = 0;
i < strTouchesBarre.length;
i++) {
11891 apCreeZone.setStyle(
"-fx-background-color : rgba(0,0,0,0.1)");
11892 apCreeZone.setPrefWidth(imgBarrePersonnalisee.getWidth());
11893 apCreeZone.setPrefHeight(imgBarrePersonnalisee.getHeight());
11895 apImgBarrePersonnalisee.getChildren().add(
apCreeZone);
11896 apZoneBarrePersonnalisee.getChildren().addAll(
11901 btnAnnuler, btnValider
11907 iNombrePointsZone++;
11908 switch (strTypeZone) {
11910 if (iNombrePointsZone == 1) {
11914 Circle
cercle =
new Circle(
t.getX(),
t.getY(), 4);
11919 if (iNombrePointsZone == 2) {
11922 rect.setFill(
Color.rgb(255, 0, 0, 0.5));
11926 =
Math.round(x1Zone * 10) / 10 +
"," +
Math.round(y1Zone * 10) / 10 +
","
11927 +
Math.round(
t.getX() * 10) / 10 +
"," +
Math.round(
t.getY() * 10) / 10;
11929 iNombrePointsZone = 0;
11933 if (iNombrePointsZone == 1) {
11937 Circle
cercle =
new Circle(
t.getX(),
t.getY(), 4);
11942 if (iNombrePointsZone == 2) {
11944 double rayon =
Math.sqrt(
Math.pow(x1Zone -
t.getX(), 2.d) +
Math.pow(y1Zone -
t.getY(), 2.d));
11945 Circle
cercle =
new Circle(x1Zone, y1Zone,
rayon);
11950 =
Math.round(x1Zone * 10) / 10 +
"," +
Math.round(y1Zone * 10) / 10 +
","
11953 iNombrePointsZone = 0;
11957 if (bRecommenceZone) {
11958 bRecommenceZone =
false;
11959 iNombrePointsZone = 1;
11961 if (iNombrePointsZone == 1) {
11965 Circle
cercle =
new Circle(
t.getX(),
t.getY(), 4);
11969 pointsPolyZone[(iNombrePointsZone - 1) * 2] =
t.getX();
11970 pointsPolyZone[(iNombrePointsZone - 1) * 2 + 1] =
t.getY();
11972 if (iNombrePointsZone == 2) {
11977 pointsPolyZone[(iNombrePointsZone - 1) * 2] =
t.getX();
11978 pointsPolyZone[(iNombrePointsZone - 1) * 2 + 1] =
t.getY();
11980 if (iNombrePointsZone > 2) {
11981 pointsPolyZone[(iNombrePointsZone - 1) * 2] =
t.getX();
11982 pointsPolyZone[(iNombrePointsZone - 1) * 2 + 1] =
t.getY();
11985 for (
int i = 0;
i < iNombrePointsZone;
i++) {
11986 poly.getPoints().addAll(pointsPolyZone[
i * 2], pointsPolyZone[
i * 2 + 1]);
11988 poly.setFill(
Color.rgb(255, 0, 0, 0.5));
11992 if (
t.getClickCount() == 2) {
11994 for (
int i = 0;
i < iNombrePointsZone;
i++) {
11998 chaine +=
Math.round(pointsPolyZone[
i * 2] * 10) / 10 +
"," +
Math.round(pointsPolyZone[
i * 2 + 1] * 10) / 10;
12001 bRecommenceZone =
true;
12008 switch (strTypeZone) {
12010 if (iNombrePointsZone == 1) {
12013 rect.setFill(
Color.rgb(255, 0, 0, 0.5));
12019 if (iNombrePointsZone == 1) {
12021 double rayon =
Math.sqrt(
Math.pow(x1Zone -
t.getX(), 2.d) +
Math.pow(y1Zone -
t.getY(), 2.d));
12022 Circle
cercle =
new Circle(x1Zone, y1Zone,
rayon);
12029 if (!bRecommenceZone) {
12030 if (iNombrePointsZone == 1) {
12036 if (iNombrePointsZone > 1) {
12039 for (
int i = 0;
i < iNombrePointsZone;
i++) {
12040 poly.getPoints().addAll(pointsPolyZone[
i * 2], pointsPolyZone[
i * 2 + 1]);
12042 poly.getPoints().addAll(
t.getX(),
t.getY());
12043 poly.setFill(
Color.rgb(255, 0, 0, 0.5));
12052 btnValider.setOnMouseClicked((
t) -> {
12053 if (strTypeZone.equals(
"poly")) {
12055 for (
int i = 0;
i < iNombrePointsZone;
i++) {
12059 strChaine +=
Math.round(pointsPolyZone[
i * 2] * 10) / 10 +
"," +
Math.round(pointsPolyZone[
i * 2 + 1] * 10) / 10;
12064 zones[iNombreZones] =
zone;
12067 btnAjouteZone.setDisable(
false);
12070 btnAnnuler.setOnMouseClicked((
t) -> {
12072 btnAjouteZone.setDisable(
false);
12083 if (
tgTypeZone.getSelectedToggle() !=
null) {
12084 strTypeZone =
tgTypeZone.getSelectedToggle().getUserData().toString();
12085 zone.setStrTypeZone(strTypeZone);
12102 for (
int i = 0;
i < iNombreZones;
i++) {
12106 strZones +=
"coords:" +
zone.getStrCoordonneesZone() +
"]\n";
12120 .getName()).log(
Level.SEVERE,
null,
ex);
12127 .getName()).log(
Level.SEVERE,
null,
ex);
12137 copieRepertoire(getStrRepertAppli() +
File.separator +
"diaporama",
fileDiapoRepert.getAbsolutePath());
12149 for (
int i = 0;
i <
diapo.getiNombreImages();
i++) {
12154 if (!fichierSource.exists()) {
12155 System.err.println(
"⚠️ Fichier image introuvable, vignette ignorée : " +
diapo.getStrFichiersImage(
i));
12162 if (
img.isError() ||
img.getWidth() == 0 ||
img.getHeight() == 0) {
12163 System.err.println(
"⚠️ Erreur de chargement de l'image, vignette ignorée : " +
diapo.getStrFichiersImage(
i));
12175 +
"<html lang=\"fr\">\n"
12177 +
" <meta charset=\"UTF-8\">\n"
12178 +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
12179 +
" <title>Diaporama - PanoVisu</title>\n"
12181 +
" * { margin: 0; padding: 0; box-sizing: border-box; }\n"
12182 +
" body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; overflow: hidden; background: #000; }\n"
12183 +
" #slideshow-container { position: relative; width: 100vw; height: 100vh; background: #000; }\n"
12184 +
" .slide { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1.2s cubic-bezier(0.4, 0.0, 0.2, 1); z-index: 1; }\n"
12185 +
" .slide.active { opacity: 1; z-index: 2; }\n"
12186 +
" .slide img { width: 100%; height: 100%; object-fit: contain; background: " +
diapo.getStrCouleurFondDiaporama() +
"; }\n"
12187 +
" #controls-bar { position: fixed; bottom: 0; left: 0; right: 0; background: linear-gradient(to top, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.7) 50%, transparent 100%); padding: 30px 40px 20px; display: flex; align-items: center; justify-content: space-between; gap: 20px; z-index: 100; opacity: 0; transform: translateY(100%); transition: all 0.4s cubic-bezier(0.4, 0.0, 0.2, 1); }\n"
12188 +
" #controls-bar.visible { opacity: 1; transform: translateY(0); }\n"
12189 +
" .control-button { background: rgba(255, 255, 255, 0.1); border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s ease; backdrop-filter: blur(10px); }\n"
12190 +
" .control-button:hover { background: rgba(255, 255, 255, 0.2); border-color: rgba(255, 255, 255, 0.6); transform: scale(1.1); }\n"
12191 +
" .control-button:active { transform: scale(0.95); }\n"
12192 +
" .control-button svg { width: 24px; height: 24px; fill: white; }\n"
12193 +
" #play-pause-btn { width: 60px; height: 60px; }\n"
12194 +
" #play-pause-btn svg { width: 28px; height: 28px; }\n"
12195 +
" #progress-container { flex: 1; height: 6px; background: rgba(255, 255, 255, 0.2); border-radius: 3px; overflow: hidden; cursor: pointer; position: relative; }\n"
12196 +
" #progress-bar { height: 100%; background: linear-gradient(90deg, #3498db 0%, #2ecc71 100%); border-radius: 3px; width: 0%; transition: width 0.1s linear; box-shadow: 0 0 10px rgba(52, 152, 219, 0.5); }\n"
12197 +
" #slide-counter { color: white; font-size: 16px; font-weight: 600; min-width: 80px; text-align: center; text-shadow: 0 2px 4px rgba(0,0,0,0.5); }\n"
12198 +
" #slide-title { position: fixed; top: 30px; left: 50%; transform: translateX(-50%); color: white; font-size: 24px; font-weight: 600; text-align: center; text-shadow: 0 2px 10px rgba(0,0,0,0.8); z-index: 99; opacity: 0; transition: opacity 0.4s ease; max-width: 80%; }\n"
12199 +
" #slide-title.visible { opacity: 1; }\n"
12200 +
" .nav-arrow { position: fixed; top: 50%; transform: translateY(-50%); background: rgba(255, 255, 255, 0.1); border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 98; opacity: 0; transition: all 0.3s ease; backdrop-filter: blur(10px); }\n"
12201 +
" .nav-arrow.visible { opacity: 1; }\n"
12202 +
" .nav-arrow:hover { background: rgba(255, 255, 255, 0.2); border-color: rgba(255, 255, 255, 0.6); transform: translateY(-50%) scale(1.1); }\n"
12203 +
" .nav-arrow:active { transform: translateY(-50%) scale(0.95); }\n"
12204 +
" #prev-arrow { left: 30px; }\n"
12205 +
" #next-arrow { right: 30px; }\n"
12206 +
" .nav-arrow svg { width: 28px; height: 28px; fill: white; }\n"
12207 +
" #thumbnails-container { position: fixed; bottom: 0; left: 0; right: 0; background: linear-gradient(to top, rgba(0,0,0,0.95) 0%, rgba(0,0,0,0.8) 100%); padding: 20px; display: flex; gap: 15px; overflow-x: auto; overflow-y: hidden; z-index: 101; max-height: 150px; transform: translateY(100%); transition: transform 0.4s cubic-bezier(0.4, 0.0, 0.2, 1); }\n"
12208 +
" #thumbnails-container.visible { transform: translateY(0); }\n"
12209 +
" #thumbnails-container::-webkit-scrollbar { height: 8px; }\n"
12210 +
" #thumbnails-container::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.1); border-radius: 4px; }\n"
12211 +
" #thumbnails-container::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.3); border-radius: 4px; }\n"
12212 +
" #thumbnails-container::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.5); }\n"
12213 +
" .thumbnail { flex-shrink: 0; width: 120px; height: 80px; border-radius: 8px; overflow: hidden; cursor: pointer; border: 3px solid transparent; transition: all 0.3s ease; position: relative; }\n"
12214 +
" .thumbnail:hover { transform: translateY(-5px); box-shadow: 0 5px 20px rgba(0,0,0,0.5); }\n"
12215 +
" .thumbnail.active { border-color: #3498db; box-shadow: 0 0 20px rgba(52, 152, 219, 0.6); }\n"
12216 +
" .thumbnail img { width: 100%; height: 100%; object-fit: cover; }\n"
12217 +
" .thumbnail-number { position: absolute; top: 5px; left: 5px; background: rgba(0,0,0,0.7); color: white; padding: 2px 6px; border-radius: 4px; font-size: 12px; font-weight: 600; }\n"
12218 +
" #toggle-thumbnails { position: fixed; bottom: 20px; right: 20px; background: rgba(255, 255, 255, 0.1); border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 102; transition: all 0.3s ease; backdrop-filter: blur(10px); }\n"
12219 +
" #toggle-thumbnails:hover { background: rgba(255, 255, 255, 0.2); border-color: rgba(255, 255, 255, 0.6); transform: scale(1.1); }\n"
12220 +
" #toggle-thumbnails svg { width: 24px; height: 24px; fill: white; }\n"
12221 +
" #fullscreen-btn { position: fixed; top: 20px; right: 20px; background: rgba(255, 255, 255, 0.1); border: 2px solid rgba(255, 255, 255, 0.3); border-radius: 50%; width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 102; transition: all 0.3s ease; backdrop-filter: blur(10px); opacity: 0; }\n"
12222 +
" #fullscreen-btn.visible { opacity: 1; }\n"
12223 +
" #fullscreen-btn:hover { background: rgba(255, 255, 255, 0.2); border-color: rgba(255, 255, 255, 0.6); transform: scale(1.1); }\n"
12224 +
" #fullscreen-btn svg { width: 24px; height: 24px; fill: white; }\n"
12225 +
" #dots-container { position: fixed; bottom: 150px; left: 50%; transform: translateX(-50%); display: flex; gap: 10px; z-index: 97; opacity: 0; transition: opacity 0.4s ease; }\n"
12226 +
" #dots-container.visible { opacity: 1; }\n"
12227 +
" .dot { width: 12px; height: 12px; border-radius: 50%; background: rgba(255, 255, 255, 0.3); cursor: pointer; transition: all 0.3s ease; }\n"
12228 +
" .dot:hover { background: rgba(255, 255, 255, 0.6); transform: scale(1.2); }\n"
12229 +
" .dot.active { background: white; box-shadow: 0 0 10px rgba(255, 255, 255, 0.8); }\n"
12230 +
" @keyframes zoomIn { from { transform: scale(0.95); opacity: 0; } to { transform: scale(1); opacity: 1; } }\n"
12231 +
" .slide.active img { animation: zoomIn 1.2s ease-out; }\n"
12235 +
" <div id=\"slideshow-container\"></div>\n"
12236 +
" <div id=\"slide-title\"></div>\n"
12237 +
" <div id=\"prev-arrow\" class=\"nav-arrow\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/></svg></div>\n"
12238 +
" <div id=\"next-arrow\" class=\"nav-arrow\"><svg viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg></div>\n"
12239 +
" <div id=\"controls-bar\">\n"
12240 +
" <div id=\"prev-btn\" class=\"control-button\" title=\"Précédent\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/></svg></div>\n"
12241 +
" <div id=\"play-pause-btn\" class=\"control-button\" title=\"Lecture/Pause\">\n"
12242 +
" <svg id=\"play-icon\" viewBox=\"0 0 24 24\" style=\"display:none;\"><path d=\"M8 5v14l11-7z\"/></svg>\n"
12243 +
" <svg id=\"pause-icon\" viewBox=\"0 0 24 24\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"/></svg>\n"
12245 +
" <div id=\"next-btn\" class=\"control-button\" title=\"Suivant\"><svg viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg></div>\n"
12246 +
" <div id=\"progress-container\"><div id=\"progress-bar\"></div></div>\n"
12247 +
" <div id=\"slide-counter\"><span id=\"current-slide\">1</span> / <span id=\"total-slides\">0</span></div>\n"
12249 +
" <div id=\"dots-container\"></div>\n"
12250 +
" <div id=\"fullscreen-btn\" title=\"Plein écran\"><svg viewBox=\"0 0 24 24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"/></svg></div>\n"
12251 +
" <div id=\"toggle-thumbnails\" title=\"Afficher/Masquer les miniatures\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z\"/></svg></div>\n"
12252 +
" <div id=\"thumbnails-container\"></div>\n"
12254 +
" const slideshowConfig = {\n"
12258 for (
int i = 0;
i <
diapo.getiNombreImages();
i++) {
12260 .replace(
"\\",
"\\\\")
12261 .replace(
"\"",
"\\\"")
12262 .replace(
"\n",
"\\n")
12263 .replace(
"\r",
"");
12265 +
"title: \"" + titre +
"\", "
12266 +
"thumb: 'vignettes/" +
diapo.getStrFichiers(
i) +
"'}";
12267 if (
i <
diapo.getiNombreImages() - 1) {
12276 +
" autoplay: true,\n"
12277 +
" transition: 'fade',\n"
12278 +
" transitionSpeed: 1200\n"
12280 +
" let currentSlide = 0, isPlaying = true, slideTimer = null, progressTimer = null, controlsTimeout = null, thumbnailsVisible = false;\n"
12281 +
" function init() { createSlides(); createThumbnails(); createDots(); showSlide(0); setupEventListeners(); showControls(); if (slideshowConfig.autoplay) startSlideshow(); }\n"
12282 +
" function createSlides() { const container = document.getElementById('slideshow-container'); slideshowConfig.slides.forEach((slide, index) => { const slideDiv = document.createElement('div'); slideDiv.className = 'slide'; slideDiv.dataset.index = index; const img = document.createElement('img'); img.src = slide.image; img.alt = slide.title || ''; slideDiv.appendChild(img); container.appendChild(slideDiv); }); document.getElementById('total-slides').textContent = slideshowConfig.slides.length; }\n"
12283 +
" function createThumbnails() { const container = document.getElementById('thumbnails-container'); slideshowConfig.slides.forEach((slide, index) => { const thumb = document.createElement('div'); thumb.className = 'thumbnail'; thumb.dataset.index = index; thumb.onclick = () => goToSlide(index); const img = document.createElement('img'); img.src = slide.thumb || slide.image; img.alt = slide.title || ''; const number = document.createElement('div'); number.className = 'thumbnail-number'; number.textContent = index + 1; thumb.appendChild(img); thumb.appendChild(number); container.appendChild(thumb); }); }\n"
12284 +
" function createDots() { const container = document.getElementById('dots-container'); slideshowConfig.slides.forEach((slide, index) => { const dot = document.createElement('div'); dot.className = 'dot'; dot.dataset.index = index; dot.onclick = () => goToSlide(index); container.appendChild(dot); }); }\n"
12285 +
" function showSlide(index) { if (index < 0) index = slideshowConfig.slides.length - 1; if (index >= slideshowConfig.slides.length) index = 0; currentSlide = index; document.querySelectorAll('.slide').forEach(slide => slide.classList.remove('active')); document.querySelector(`.slide[data-index=\"${index}\"]`).classList.add('active'); document.querySelectorAll('.thumbnail').forEach(thumb => thumb.classList.remove('active')); const activeThumb = document.querySelector(`.thumbnail[data-index=\"${index}\"]`); activeThumb.classList.add('active'); activeThumb.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' }); document.querySelectorAll('.dot').forEach(dot => dot.classList.remove('active')); document.querySelector(`.dot[data-index=\"${index}\"]`)?.classList.add('active'); const title = slideshowConfig.slides[index].title; const titleElement = document.getElementById('slide-title'); if (title) { titleElement.textContent = title; titleElement.classList.add('visible'); } else { titleElement.classList.remove('visible'); } document.getElementById('current-slide').textContent = index + 1; resetProgress(); }\n"
12286 +
" function nextSlide() { showSlide(currentSlide + 1); }\n"
12287 +
" function prevSlide() { showSlide(currentSlide - 1); }\n"
12288 +
" function goToSlide(index) { const wasPlaying = isPlaying; stopSlideshow(); showSlide(index); if (wasPlaying) startSlideshow(); }\n"
12289 +
" function startSlideshow() { if (slideTimer) clearInterval(slideTimer); if (progressTimer) clearInterval(progressTimer); isPlaying = true; updatePlayPauseButton(); slideTimer = setInterval(nextSlide, slideshowConfig.interval); startProgress(); }\n"
12290 +
" function stopSlideshow() { if (slideTimer) clearInterval(slideTimer); if (progressTimer) clearInterval(progressTimer); isPlaying = false; updatePlayPauseButton(); }\n"
12291 +
" function togglePlayPause() { if (isPlaying) stopSlideshow(); else startSlideshow(); }\n"
12292 +
" function updatePlayPauseButton() { document.getElementById('play-icon').style.display = isPlaying ? 'none' : 'block'; document.getElementById('pause-icon').style.display = isPlaying ? 'block' : 'none'; }\n"
12293 +
" function startProgress() { let progress = 0; const progressBar = document.getElementById('progress-bar'); const increment = 100 / (slideshowConfig.interval / 100); progressTimer = setInterval(() => { progress += increment; if (progress >= 100) progress = 100; progressBar.style.width = progress + '%'; }, 100); }\n"
12294 +
" function resetProgress() { if (progressTimer) clearInterval(progressTimer); document.getElementById('progress-bar').style.width = '0%'; if (isPlaying) startProgress(); }\n"
12295 +
" function showControls() { document.getElementById('controls-bar').classList.add('visible'); document.getElementById('prev-arrow').classList.add('visible'); document.getElementById('next-arrow').classList.add('visible'); document.getElementById('fullscreen-btn').classList.add('visible'); document.getElementById('dots-container').classList.add('visible'); if (controlsTimeout) clearTimeout(controlsTimeout); controlsTimeout = setTimeout(hideControls, 3000); }\n"
12296 +
" function hideControls() { if (!thumbnailsVisible) { document.getElementById('controls-bar').classList.remove('visible'); document.getElementById('prev-arrow').classList.remove('visible'); document.getElementById('next-arrow').classList.remove('visible'); document.getElementById('fullscreen-btn').classList.remove('visible'); document.getElementById('dots-container').classList.remove('visible'); } }\n"
12297 +
" function toggleThumbnails() { thumbnailsVisible = !thumbnailsVisible; const container = document.getElementById('thumbnails-container'); if (thumbnailsVisible) { container.classList.add('visible'); showControls(); } else { container.classList.remove('visible'); } }\n"
12298 +
" function toggleFullscreen() { if (!document.fullscreenElement) document.documentElement.requestFullscreen(); else document.exitFullscreen(); }\n"
12299 +
" function manualPrevSlide() { const wasPlaying = isPlaying; stopSlideshow(); prevSlide(); if (wasPlaying) startSlideshow(); }\n"
12300 +
" function manualNextSlide() { const wasPlaying = isPlaying; stopSlideshow(); nextSlide(); if (wasPlaying) startSlideshow(); }\n"
12301 +
" function setupEventListeners() { document.getElementById('prev-btn').onclick = manualPrevSlide; document.getElementById('next-btn').onclick = manualNextSlide; document.getElementById('play-pause-btn').onclick = togglePlayPause; document.getElementById('prev-arrow').onclick = manualPrevSlide; document.getElementById('next-arrow').onclick = manualNextSlide; document.getElementById('toggle-thumbnails').onclick = toggleThumbnails; document.getElementById('fullscreen-btn').onclick = toggleFullscreen; document.getElementById('progress-container').onclick = (e) => { const rect = e.currentTarget.getBoundingClientRect(); const percent = (e.clientX - rect.left) / rect.width; const slideIndex = Math.floor(percent * slideshowConfig.slides.length); goToSlide(slideIndex); }; document.addEventListener('keydown', (e) => { if (e.key === 'ArrowLeft') { manualPrevSlide(); } else if (e.key === 'ArrowRight') { manualNextSlide(); } else if (e.key === ' ') { e.preventDefault(); togglePlayPause(); } else if (e.key === 'Escape') { if (document.fullscreenElement) document.exitFullscreen(); } else if (e.key === 'f' || e.key === 'F') { toggleFullscreen(); } }); document.addEventListener('mousemove', showControls); document.addEventListener('touchstart', showControls); }\n"
12302 +
" window.addEventListener('load', init);\n"
12319 apCreationDiaporama.getChildren().clear();
12320 apCreationDiaporama.getStyleClass().add(
"dialog-content-pane");
12321 mbarPrincipal.setDisable(
true);
12322 bbarPrincipal.setDisable(
true);
12323 hbBarreBouton.setDisable(
true);
12324 tpEnvironnement.setDisable(
true);
12339 for (
int i = 0;
i < getiNombreDiapo();
i++) {
12340 cbListeDiapo.getItems().add(diaporamas[
i].getStrNomDiaporama());
12354 gestDiapo.initDiaporama();
12355 apCreationDiaporama.getChildren().addAll(
12358 gestDiapo.apDiaporama
12361 apCreationDiaporama.setPrefWidth(
iLargeur);
12363 apCreationDiaporama.setMaxWidth(
iLargeur);
12364 apCreationDiaporama.setPrefHeight(
iHauteur);
12366 apCreationDiaporama.setMaxHeight(
iHauteur);
12369 apCreationDiaporama.setVisible(
true);
12371 gestDiapo.addPropertyChangeListener(
"valideDiapo", (
e) -> {
12372 mbarPrincipal.setDisable(
false);
12373 bbarPrincipal.setDisable(
false);
12374 hbBarreBouton.setDisable(
false);
12375 tpEnvironnement.setDisable(
false);
12376 apCreationDiaporama.setVisible(
false);
12380 for (
int i = 0;
i < getiNombreDiapo();
i++) {
12381 if (diaporamas[
i].getStrNomDiaporama().equals(
cbListeDiapo.getValue())) {
12387 diaporamas[
iTrouve] = gestDiapo.getDiaporama();
12397 gestDiapo.addPropertyChangeListener(
"visualiseDiapo", (
e) -> {
12399 creeDiaporamaHTML(gestDiapo.getDiaporama(), -1);
12403 String strNomFichier = getStrRepertTemp()
12406 webEngine.load(
"file:///" + strNomFichier);
12407 apWebview.getChildren().clear();
12408 browser.setPrefSize(apWebview.getPrefWidth() - 20, apWebview.getPrefHeight() - 50);
12409 browser.setTranslateX(10);
12410 browser.setTranslateY(10);
12411 apWebview.getChildren().add(browser);
12413 btnOk.setPrefSize(100, 20);
12414 btnOk.setLayoutX(apWebview.getPrefWidth() - 110);
12415 btnOk.setLayoutY(apWebview.getPrefHeight() - 30);
12416 apWebview.getChildren().add(
btnOk);
12417 apWebview.setVisible(
true);
12418 btnOk.setOnMouseClicked((
me) -> {
12419 apWebview.setVisible(
false);
12420 apWebview.getChildren().
clear();
12424 gestDiapo.addPropertyChangeListener(
"annuleDiapo", (
e) -> {
12425 mbarPrincipal.setDisable(
false);
12426 bbarPrincipal.setDisable(
false);
12427 hbBarreBouton.setDisable(
false);
12428 tpEnvironnement.setDisable(
false);
12429 apCreationDiaporama.setVisible(
false);
12439 if (!gestDiapo.diapoSauve) {
12441 alert.setTitle(rbLocalisation.getString(
"diapo.sauver"));
12442 alert.setHeaderText(
null);
12443 alert.setContentText(rbLocalisation.getString(
"diapo.sauverTexte"));
12444 alert.getButtonTypes().clear();
12453 for (
int i = 0;
i < getiNombreDiapo();
i++) {
12454 if (diaporamas[
i].getStrNomDiaporama().equals(
old_val)) {
12460 diaporamas[
iTrouve] = gestDiapo.getDiaporama();
12472 for (
int i = 0;
i < getiNombreDiapo();
i++) {
12473 if (diaporamas[
i].getStrNomDiaporama().equals(
new_val)) {
12479 gestDiapo.setbDisabled(
false);
12480 gestDiapo.reInit(diaporamas[
iTrouve]);
12491 if (!gestDiapo.diapoSauve) {
12493 alert.setTitle(rbLocalisation.getString(
"diapo.sauver"));
12494 alert.setHeaderText(
null);
12495 alert.setContentText(rbLocalisation.getString(
"diapo.sauverTexte"));
12496 alert.getButtonTypes().clear();
12505 for (
int i = 0;
i < getiNombreDiapo();
i++) {
12506 if (diaporamas[
i].getStrNomDiaporama().equals(
cbListeDiapo.getValue())) {
12512 diaporamas[
iTrouve] = gestDiapo.getDiaporama();
12523 dialog.setTitle(rbLocalisation.getString(
"main.nomDiapo"));
12524 dialog.setHeaderText(
null);
12525 dialog.setContentText(rbLocalisation.getString(
"diapo.entrerNom"));
12531 for (
int i = 0;
i < getiNombreDiapo();
i++) {
12532 if (diaporamas[
i].getStrNomDiaporama().equals(
nomDiapo)) {
12537 diaporamas[getiNombreDiapo()] =
new Diaporama();
12541 gestDiapo.setbDisabled(
false);
12542 gestDiapo.reInit(diaporamas[getiNombreDiapo()]);
12543 setiNombreDiapo(getiNombreDiapo() + 1);
12547 alert.setTitle(rbLocalisation.getString(
"diapo.erreur"));
12548 alert.setHeaderText(
null);
12549 alert.setContentText(rbLocalisation.getString(
"diapo.erreurNom"));
12550 alert.showAndWait();
12564 apCreationBarre.getChildren().clear();
12565 apCreationBarre.getStyleClass().add(
"dialog-content-pane");
12574 btnAjouteZone =
new Button(rbLocalisation.getString(
"main.ajouteZone"),
new ImageView(
new Image(
"file:" + getStrRepertAppli() +
"/images/btn+.png", 24, 24,
true,
true,
true)));
12576 apImgBarrePersonnalisee.getChildren().clear();
12577 apZoneBarrePersonnalisee =
new AnchorPane();
12578 apZoneBarrePersonnalisee.getChildren().clear();
12579 apZoneBarrePersonnalisee.setLayoutX(0);
12580 apZoneBarrePersonnalisee.setLayoutY(180);
12581 apZoneBarrePersonnalisee.setPrefWidth(330);
12582 apZoneBarrePersonnalisee.setPrefHeight(280);
12588 mbarPrincipal.setDisable(
true);
12589 bbarPrincipal.setDisable(
true);
12590 hbBarreBouton.setDisable(
true);
12591 tpEnvironnement.setDisable(
true);
12592 apCreationBarre.setPrefWidth(
iLargeur);
12593 apCreationBarre.setMinWidth(
iLargeur);
12594 apCreationBarre.setMaxWidth(
iLargeur);
12595 apCreationBarre.setPrefHeight(
iHauteur);
12596 apCreationBarre.setMinHeight(
iHauteur);
12597 apCreationBarre.setMaxHeight(
iHauteur);
12600 apCreationBarre.setVisible(
true);
12652 btnAjouteZone.setLayoutX(20);
12653 btnAjouteZone.setLayoutY(145);
12654 btnAjouteZone.setPrefWidth(300);
12655 btnAjouteZone.setPrefHeight(35);
12656 btnAjouteZone.setDisable(
true);
12676 apZoneBarrePersonnalisee,
12680 apCreationBarre.getChildren().addAll(apImgBarrePersonnalisee,
apOutilsBarre);
12686 strNomFichier = strNomFichier.substring(0, strNomFichier.length() - 4);
12687 strNomFichierShp = strNomFichier +
".shp";
12692 btnAjouteZone.setDisable(
false);
12694 iNombreZones = getGestionnaireInterface().lisFichierShp(strNomFichierShp, zones);
12696 if (iNombreZones > 0) {
12703 .getName()).log(
Level.SEVERE,
null,
ex);
12710 mbarPrincipal.setDisable(
false);
12711 bbarPrincipal.setDisable(
false);
12712 hbBarreBouton.setDisable(
false);
12713 tpEnvironnement.setDisable(
false);
12714 apCreationBarre.setVisible(
false);
12717 btnAjouteZone.setOnMouseClicked((
t) -> {
12718 btnAjouteZone.setDisable(
true);
12722 strRepertBarrePersonnalisee = getStrRepertAppli() +
"/theme/telecommandes";
12734 strNomFichier = strNomFichier.substring(0, strNomFichier.length() - 4);
12735 strNomFichierShp = strNomFichier +
".shp";
12740 btnAjouteZone.setDisable(
false);
12742 iNombreZones = getGestionnaireInterface().lisFichierShp(strNomFichierShp, zones);
12744 if (iNombreZones > 0) {
12751 .getName()).log(
Level.SEVERE,
null,
ex);
12759 sauverBarre(strNomFichierShp);
12764 .getName()).log(
Level.SEVERE,
null,
ex);
12789 vbMonPanneau =
new VBox();
12791 vbMonPanneau.setPrefHeight(80);
12792 vbMonPanneau.setPrefWidth(3000);
12793 mbarPrincipal.setMinHeight(29);
12794 mbarPrincipal.setPrefHeight(29);
12795 mbarPrincipal.setMaxHeight(29);
12796 mbarPrincipal.setPrefWidth(3000);
12798 mbarPrincipal.setUseSystemMenuBar(
true);
12805 mbarPrincipal.getMenus().add(
mnuProjet);
12806 mniNouveauProjet =
new MenuItem(rbLocalisation.getString(
"nouveauProjet"));
12808 mnuProjet.getItems().add(mniNouveauProjet);
12809 mniChargeProjet =
new MenuItem(rbLocalisation.getString(
"ouvrirProjet"));
12812 mnuProjet.getItems().add(mniChargeProjet);
12813 mniSauveProjet =
new MenuItem(rbLocalisation.getString(
"sauverProjet"));
12814 mniSauveProjet.setDisable(
true);
12816 mnuProjet.getItems().add(mniSauveProjet);
12817 mniSauveSousProjet =
new MenuItem(rbLocalisation.getString(
"sauverProjetSous"));
12818 mniSauveSousProjet.setDisable(
true);
12820 mnuProjet.getItems().add(mniSauveSousProjet);
12821 mnuDerniersProjets =
new Menu(rbLocalisation.getString(
"derniersProjets"));
12822 mnuProjet.getItems().add(mnuDerniersProjets);
12823 fileHistoFichiers =
new File(fileRepertConfig.getAbsolutePath() +
File.separator +
"derniersprojets.cfg");
12824 nombreHistoFichiers = 0;
12825 if (fileHistoFichiers.exists()) {
12831 strHistoFichiers[nombreHistoFichiers] = strTexteHisto;
12832 nombreHistoFichiers++;
12841 .getName()).log(
Level.SEVERE,
null,
ex);
12846 .getName()).log(
Level.SEVERE,
null,
ex);
12856 mniFermerProjet =
new MenuItem(rbLocalisation.getString(
"quitterApplication"));
12858 mnuProjet.getItems().add(mniFermerProjet);
12864 mniAffichageVisite =
new MenuItem(rbLocalisation.getString(
"main.creationVisite"));
12867 mniAffichageInterface =
new MenuItem(rbLocalisation.getString(
"main.creationInterface"));
12870 setMniAffichagePlan(
new MenuItem(rbLocalisation.getString(
"main.tabPlan")));
12872 getMniAffichagePlan().setDisable(
true);
12875 rbLocalisation.getString(
"main.loupe")
12882 mniConfigTransformation =
new MenuItem(rbLocalisation.getString(
"affichageConfiguration"));
12890 afficherDialogueTheme();
12892 ex.printStackTrace();
12900 mnuPanoramique =
new Menu(rbLocalisation.getString(
"panoramiques"));
12901 mnuPanoramique.setDisable(
true);
12902 mbarPrincipal.getMenus().add(mnuPanoramique);
12903 mniAjouterPano =
new MenuItem(rbLocalisation.getString(
"ajouterPanoramiques"));
12905 mnuPanoramique.getItems().add(mniAjouterPano);
12906 setMniAjouterPlan(
new MenuItem(rbLocalisation.getString(
"ajouterPlan")));
12908 mnuPanoramique.getItems().add(getMniAjouterPlan());
12909 getMniAjouterPlan().setDisable(
true);
12911 mnuPanoramique.getItems().add(
sep2);
12912 mniVisiteGenere =
new MenuItem(rbLocalisation.getString(
"genererVisite"));
12913 mniVisiteGenere.setDisable(
true);
12915 mnuPanoramique.getItems().add(mniVisiteGenere);
12917 mniCreerZipVisite =
new MenuItem(rbLocalisation.getString(
"creerZipVisite"));
12918 mniCreerZipVisite.setDisable(
true);
12920 mnuPanoramique.getItems().add(mniCreerZipVisite);
12924 mnuModeles =
new Menu(rbLocalisation.getString(
"menuModele"));
12925 mbarPrincipal.getMenus().add(mnuModeles);
12927 mniChargerModele =
new MenuItem(rbLocalisation.getString(
"modeleCharger"));
12928 mnuModeles.getItems().add(mniChargerModele);
12930 mniSauverModele =
new MenuItem(rbLocalisation.getString(
"modeleSauver"));
12931 mnuModeles.getItems().add(mniSauverModele);
12936 mnuTransformation =
new Menu(rbLocalisation.getString(
"outils"));
12937 mbarPrincipal.getMenus().add(mnuTransformation);
12938 mniEqui2CubeTransformation =
new MenuItem(rbLocalisation.getString(
"outilsEqui2Cube"));
12939 mnuTransformation.getItems().add(mniEqui2CubeTransformation);
12940 mniCube2EquiTransformation =
new MenuItem(rbLocalisation.getString(
"outilsCube2Equi"));
12941 mnuTransformation.getItems().add(mniCube2EquiTransformation);
12943 mnuTransformation.getItems().add(
sep6);
12944 mniOutilsBarre =
new MenuItem(rbLocalisation.getString(
"outilsBarre"));
12946 mnuTransformation.getItems().add(mniOutilsBarre);
12947 mniOutilsDiaporama =
new MenuItem(rbLocalisation.getString(
"outilsDiaporama"));
12949 mnuTransformation.getItems().add(mniOutilsDiaporama);
12953 mnuTransformation.getItems().add(
sep7);
12956 mniRedimensionnerImages =
new MenuItem(rbLocalisation.getString(
"outilsRedimensionnement"));
12957 mnuTransformation.getItems().add(mniRedimensionnerImages);
12959 mniConvertirRatio2to1 =
new MenuItem(rbLocalisation.getString(
"outilsRatio2to1"));
12960 mnuTransformation.getItems().add(mniConvertirRatio2to1);
12966 mbarPrincipal.getMenus().add(
mnuAide);
12967 mniDocumentation =
new MenuItem(rbLocalisation.getString(
"aideDocumentation"));
12969 mnuAide.getItems().add(mniDocumentation);
12973 mniAPropos =
new MenuItem(rbLocalisation.getString(
"aideAPropos"));
12974 mnuAide.getItems().add(mniAPropos);
12981 hbBarreBouton =
new HBox();
12982 hbBarreBouton.getStyleClass().add(
"menuBarreOutils1");
12984 hbBarreBouton.setPrefHeight(50);
12985 hbBarreBouton.setMinHeight(50);
12986 hbBarreBouton.setPrefWidth(3000);
12989 clip.widthProperty().bind(hbBarreBouton.widthProperty());
12990 clip.heightProperty().bind(hbBarreBouton.heightProperty());
12991 hbBarreBouton.setClip(
clip);
13004 ivNouveauProjet = loadSvgIcon(
"nouveau-projet", 32);
13022 ivChargeProjet = loadSvgIcon(
"ouvrir-projet", 32);
13041 ivSauveProjet = loadSvgIcon(
"sauve-projet", 32);
13049 hbBarreBouton.getChildren().add(
sepImages);
13050 ivSauveProjet.setDisable(
true);
13051 ivSauveProjet.setOpacity(0.3);
13064 ivAjouterPano = loadSvgIcon(
"ajoute-panoramique", 32);
13070 ivAjouterPano.setDisable(
true);
13071 ivAjouterPano.setOpacity(0.3);
13085 setIvAjouterPlan(loadSvgIcon(
"ajoute-plan", 32));
13091 getIvAjouterPlan().setDisable(
true);
13092 getIvAjouterPlan().setOpacity(0.3);
13106 ivVisiteGenere = loadSvgIcon(
"genere-visite", 32);
13112 ivVisiteGenere.setDisable(
true);
13113 ivVisiteGenere.setOpacity(0.3);
13128 ivGenereZip = loadSvgIcon(
"genere-zip", 35);
13134 ivGenereZip.setDisable(
true);
13135 ivGenereZip.setOpacity(0.3);
13139 hbBarreBouton.getChildren().add(
sepImages1);
13157 ivRedimensionnerImages = loadSvgIcon(
"redimensionner-images", 95, 48,
null);
13180 ivConvertirRatio2to1 = loadSvgIcon(
"ratio-2to1", 128, 72,
null);
13203 ivEqui2Cube = loadSvgIcon(
"vue-sphere", 128, 64,
null);
13226 ivCube2Equi = loadSvgIcon(
"vue-cube", 128, 64,
null);
13233 mbarPrincipal.setMaxHeight(0);
13234 hbBarreBouton.setTranslateY(-30);
13236 vbMonPanneau.getChildren().addAll(mbarPrincipal, hbBarreBouton);
13237 vbRacine.getChildren().add(vbMonPanneau);
13238 mniNouveauProjet.setOnAction((
e) -> {
13241 mniChargeProjet.setOnAction((
e) -> {
13248 .getName()).log(
Level.SEVERE,
null,
ex);
13253 .getName()).log(
Level.SEVERE,
null,
ex);
13256 mniSauveProjet.setOnAction((
e) -> {
13262 .getName()).log(
Level.SEVERE,
null,
ex);
13265 mniSauveSousProjet.setOnAction((
e) -> {
13271 .getName()).log(
Level.SEVERE,
null,
ex);
13274 mniVisiteGenere.setOnAction((
e) -> {
13280 .getName()).log(
Level.SEVERE,
null,
ex);
13284 mniCreerZipVisite.setOnAction((
e) -> {
13290 .getName()).log(
Level.SEVERE,
null,
ex);
13294 mniFermerProjet.setOnAction((
e) -> {
13300 .getName()).log(
Level.SEVERE,
null,
ex);
13303 mniAjouterPano.setOnAction((
e) -> {
13305 panoramiquesAjouter();
13309 .getName()).log(
Level.SEVERE,
null,
ex);
13312 getMniAjouterPlan().setOnAction((
e) -> {
13315 mniAPropos.setOnAction((
e) -> {
13319 mniDocumentation.setOnAction((
e) -> {
13323 mniChargerModele.setOnAction((
e) -> {
13329 .getName()).log(
Level.SEVERE,
null,
ex);
13333 mniSauverModele.setOnAction((
e) -> {
13339 .getName()).log(
Level.SEVERE,
null,
ex);
13343 mniCube2EquiTransformation.setOnAction((
e) -> {
13344 transformationCube2Equi();
13347 mniEqui2CubeTransformation.setOnAction((
e) -> {
13348 transformationEqui2Cube();
13351 mniOutilsBarre.setOnAction((
e) -> {
13352 creerEditerBarre(
"");
13354 mniOutilsDiaporama.setOnAction((
e) -> {
13355 creerEditerDiaporama(
"");
13359 mniRedimensionnerImages.setOnAction((
e) -> {
13360 ouvrirOutilRedimensionnementImages();
13363 mniConvertirRatio2to1.setOnAction((
e) -> {
13364 ouvrirOutilConversionRatio2to1();
13366 mniOutilsLoupe.setOnAction((
e) -> {
13368 setAfficheLoupe(!isAfficheLoupe());
13369 apLoupe.setVisible(isAfficheLoupe());
13371 if (
p.x < getiTailleLoupe() + 80 &&
p.y < getiTailleLoupe() + 160) {
13372 apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5);
13373 apLoupe.setLayoutY(35);
13374 strPositLoupe =
"droite";
13376 apLoupe.setLayoutX(35);
13377 apLoupe.setLayoutY(35);
13378 strPositLoupe =
"gauche";
13382 mniAffichageVisite.setOnAction((
e) -> {
13383 tpEnvironnement.getSelectionModel().select(0);
13385 mniAffichageInterface.setOnAction((
e) -> {
13386 tpEnvironnement.getSelectionModel().select(1);
13388 getMniAffichagePlan().setOnAction((
e) -> {
13389 if (!tabPlan.isDisabled()) {
13390 tpEnvironnement.getSelectionModel().select(2);
13394 mniConfigTransformation.setOnAction((
e) -> {
13397 cfg.afficheFenetre();
13401 .getName()).log(
Level.SEVERE,
null,
ex);
13415 .getName()).log(
Level.SEVERE,
null,
ex);
13420 .getName()).log(
Level.SEVERE,
null,
ex);
13429 .getName()).log(
Level.SEVERE,
null,
ex);
13434 panoramiquesAjouter();
13438 .getName()).log(
Level.SEVERE,
null,
ex);
13450 .getName()).log(
Level.SEVERE,
null,
ex);
13459 .getName()).log(
Level.SEVERE,
null,
ex);
13464 ouvrirOutilRedimensionnementImages();
13468 ouvrirOutilConversionRatio2to1();
13472 transformationEqui2Cube();
13475 transformationCube2Equi();
13487 alert.setTitle(rbLocalisation.getString(
"main.supprimerPano"));
13488 alert.setHeaderText(
null);
13489 alert.setContentText(rbLocalisation.getString(
"main.etesVousSur"));
13490 alert.getButtonTypes().clear();
13496 for (
int i = 0;
i < getPanoramiquesProjet()[getiPanoActuel()].getNombreNiveaux();
i++) {
13497 if (getPanoramiquesProjet()[getiPanoActuel()].getStrTypePanoramique().equals(
Panoramique.
SPHERE)) {
13505 +
"panovisu" + getiPanoActuel() +
".jpg"
13515 +
"panovisu" + getiPanoActuel();
13536 +
"panovisu" + getiPanoActuel() +
".jpg"
13544 +
"panovisu" + getiPanoActuel();
13559 int iPanCourant = cbListeChoixPanoramique.getSelectionModel().getSelectedIndex();
13561 for (
int i =
iPanCourant;
i < getiNombrePanoramiques() - 1;
i++) {
13562 for (
int j = 0;
j < getPanoramiquesProjet()[
i].getNombreNiveaux();
j++) {
13563 if (getPanoramiquesProjet()[getiPanoActuel()].getStrTypePanoramique().equals(
Panoramique.
SPHERE)) {
13571 +
"panovisu" + (
i + 1) +
".jpg"
13580 +
"panovisu" +
i +
".jpg"
13590 +
"panovisu" + (
i + 1);
13625 +
"panovisu" + (
i + 1) +
".jpg"
13632 +
"panovisu" +
i +
".jpg"
13640 +
"panovisu" + (
i + 1);
13665 getPanoramiquesProjet()[
i] = getPanoramiquesProjet()[
i + 1];
13667 for (
int i = 0;
i < getiNombrePanoramiques() - 1;
i++) {
13668 for (
int j = 0;
j < getPanoramiquesProjet()[
i].getNombreHotspots();
j++) {
13669 if (getPanoramiquesProjet()[
i].getHotspot(
j).getNumeroPano() ==
iPanCourant) {
13670 getPanoramiquesProjet()[
i].removeHotspot(
j);
13675 for (
int i = 0;
i < getiNombrePanoramiques() - 1;
i++) {
13676 for (
int j = 0;
j < getPanoramiquesProjet()[
i].getNombreHotspots();
j++) {
13677 if (getPanoramiquesProjet()[
i].getHotspot(
j).getNumeroPano() >
iPanCourant) {
13678 getPanoramiquesProjet()[
i].getHotspot(
j).setNumeroPano(getPanoramiquesProjet()[
i].getHotspot(
j).getNumeroPano() - 1);
13682 for (
int i = 0;
i < getiNombrePlans();
i++) {
13683 for (
int j = 0;
j < getPlans()[
i].getNombreHotspots();
j++) {
13684 if (getPlans()[
i].getHotspot(
j).getNumeroPano() ==
iPanCourant) {
13685 getPlans()[
i].removeHotspot(
j);
13690 for (
int i = 0;
i < getiNombrePlans();
i++) {
13691 for (
int j = 0;
j < getPlans()[
i].getNombreHotspots();
j++) {
13692 if (getPlans()[
i].getHotspot(
j).getNumeroPano() >
iPanCourant) {
13693 getPlans()[
i].getHotspot(
j).setNumeroPano(getPlans()[
i].getHotspot(
j).getNumeroPano() - 1);
13698 cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(0));
13699 affichePanoChoisit(0);
13701 apListePanoTriable = ordPano.getApListePanoramiques();
13702 apListePanoTriable.setMaxHeight(apListePanoTriable.getPrefHeight());
13703 apListePanoTriable.setMinHeight(apListePanoTriable.getPrefHeight());
13704 apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20);
13705 if (apParametresVisite.isVisible()) {
13706 apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20);
13707 apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20);
13709 rafraichitListePano();
13710 setiNombrePanoramiques(getiNombrePanoramiques() - 1);
13732 vbRacine =
new VBox();
13737 if (!fileRepertConfig.exists()) {
13738 fileRepertConfig.mkdirs();
13739 setLocale(
new Locale(
"fr",
"FR"));
13742 setStrRepertoireProjet(getStrRepertAppli());
13744 lisFichierConfig();
13749 creeMenu(vbRacine);
13751 tpEnvironnement =
new TabPane();
13752 tpEnvironnement.setMinHeight(
iHauteur - 60);
13753 tpEnvironnement.setMaxHeight(
iHauteur - 60);
13754 tpEnvironnement.setMinWidth(
iLargeur);
13755 tpEnvironnement.setMaxWidth(
iLargeur);
13759 paneBarreStatus.setStyle(
"-fx-background-color:#c00;-fx-border-color:#aaa");
13760 tabVisite =
new Tab();
13763 setTabInterface(
new Tab());
13764 setTabPlan(
new Tab());
13768 panePlan = getGestionnairePlan().getPaneInterface();
13770 getTabPlan().setContent(panePlan);
13776 tpEnvironnement.getTabs().addAll(tabVisite, getTabInterface(), getTabPlan());
13777 tpEnvironnement.setSide(
Side.TOP);
13779 if (getGestionnaireInterface().navigateurCarteOL ==
null && isbInternet()) {
13780 getGestionnaireInterface().navigateurCarteOL =
new NavigateurCarte();
13783 getGestionnaireInterface().rafraichit();
13785 tabInterface.disableProperty().addListener((
ov,
av,
nv) -> {
13786 if (!
nv && getGestionnaireInterface().navigateurCarteOL ==
null && isbInternet()) {
13787 getGestionnaireInterface().navigateurCarteOL =
new NavigateurCarte();
13792 tabVisite.setText(rbLocalisation.getString(
"main.creationVisite"));
13793 tabVisite.setClosable(
false);
13794 tabVisite.setStyle(
"-fx-font-size: 16px; -fx-font-weight: bold;");
13795 getTabInterface().setText(rbLocalisation.getString(
"main.creationInterface"));
13796 getTabInterface().setClosable(
false);
13797 getTabInterface().setStyle(
"-fx-font-size: 16px; -fx-font-weight: bold;");
13798 getTabPlan().setText(rbLocalisation.getString(
"main.tabPlan"));
13799 getTabPlan().setClosable(
false);
13800 getTabPlan().setStyle(
"-fx-font-size: 16px; -fx-font-weight: bold;");
13801 getTabPlan().setDisable(
true);
13807 String strLabelStyle =
"-fx-color : white;-fx-background-color : #fff;-fx-padding : 5px; -fx-border : 1px solid #777;-fx-width : 100px;-fx-margin : 5px; ";
13808 vbRacine.setStyle(
"-fx-font-size : 9pt;-fx-font-family: Arial;");
13809 vbRacine.setTranslateY(15);
13811 spPanneauOutils.setId(
"panOutils");
13812 vbOutils =
new VBox(-5);
13813 vbOutils.setPrefWidth(largeurOutils - 20);
13814 setVbChoixPanoramique(
new VBox());
13815 getVbChoixPanoramique().setId(
"choixPanoramique");
13819 apPanovisu.setPrefHeight(50);
13820 apPanovisu.setMinHeight(50);
13821 apPanovisu.setMaxHeight(50);
13823 apPanovisu.setMaxWidth(380);
13824 apPanovisu.setPrefWidth(380);
13825 apPanovisu.setMinWidth(380);
13826 apPanovisu.setLayoutX(
iLargeur - 380);
13828 apPanovisu.setLayoutY(0);
13831 apPanovisu.setLayoutY(45);
13833 apPanovisu.setStyle(
"-fx-background-color : derive(-fx-base,20%);");
13839 lblPanoVisu.setStyle(
"-fx-font-weight : bold;-fx-font-family : Verdana,Arial,sans-serif;-fx-font-size : 1.2em;");
13845 lblPanoVisu2.setStyle(
"-fx-font-family : Verdana,Arial,sans-serif;-fx-font-size : 0.8em;");
13849 apWebview.setVisible(
false);
13850 apWebview.setStyle(
"-fx-background-color : #333;");
13854 apWebview.setTranslateX(25);
13855 apWebview.setTranslateY(5);
13860 apParametresVisite.setLayoutY(40);
13862 lblTitreVisite.setStyle(
"-fx-font-size : 10pt;-fx-font-weight : bold;");
13872 cbIntroPetitePlanete =
new CheckBox(rbLocalisation.getString(
"main.introPetitePlanete"));
13873 cbIntroPetitePlanete.setSelected(
false);
13874 cbIntroPetitePlanete.setLayoutX(10);
13875 cbIntroPetitePlanete.setLayoutY(60);
13885 apParametresVisite.setPrefHeight(120);
13886 apParametresVisite.getChildren().addAll(
13888 cbIntroPetitePlanete,
13899 poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre());
13901 cbAutoRotationDemarrage =
new CheckBox(rbLocalisation.getString(
"main.autoRotationDemarrage"));
13902 cbAutoRotationDemarrage.setSelected(
false);
13903 cbAutoRotationDemarrage.setLayoutX(10);
13904 cbAutoRotationDemarrage.setLayoutY(10);
13909 cbAutoRotationVitesse =
new ComboBox();
13910 cbAutoRotationVitesse.getItems().add(0,
"10 " + rbLocalisation.getString(
"main.parTour"));
13911 cbAutoRotationVitesse.getItems().add(1,
"20 " + rbLocalisation.getString(
"main.parTour"));
13912 cbAutoRotationVitesse.getItems().add(2,
"30 " + rbLocalisation.getString(
"main.parTour"));
13913 cbAutoRotationVitesse.getItems().add(3,
"Autre n " + rbLocalisation.getString(
"main.parTour"));
13914 cbAutoRotationVitesse.getSelectionModel().select(2);
13915 cbAutoRotationVitesse.setLayoutX(30);
13916 cbAutoRotationVitesse.setLayoutY(70);
13917 cbAutoRotationVitesse.setMaxWidth(170);
13919 bdfAutoRotationVitesse.setDisable(
true);
13920 bdfAutoRotationVitesse.setLayoutX(210);
13921 bdfAutoRotationVitesse.setLayoutY(70);
13922 bdfAutoRotationVitesse.setMaxWidth(70);
13923 lblVitesse.disableProperty().bind(cbAutoRotationDemarrage.selectedProperty().not());
13924 cbAutoRotationVitesse.disableProperty().bind(cbAutoRotationDemarrage.selectedProperty().not());
13933 cbAutoTourDemarrage =
new CheckBox(rbLocalisation.getString(
"main.autoTour"));
13934 cbAutoTourDemarrage.setSelected(
false);
13935 cbAutoTourDemarrage.setLayoutX(10);
13936 cbAutoTourDemarrage.setLayoutY(120);
13941 bdfAutoTourDemarrage.setLayoutX(240);
13942 bdfAutoTourDemarrage.setLayoutY(180);
13943 bdfAutoTourDemarrage.setMaxWidth(70);
13950 cbAutoTourType.getItems().add(rbLocalisation.getString(
"main.nTours"));
13951 cbAutoTourType.getItems().add(rbLocalisation.getString(
"main.nSecondes"));
13952 cbAutoTourType.getSelectionModel().select(1);
13953 cbAutoTourType.setLayoutX(30);
13954 cbAutoTourType.setLayoutY(240);
13955 cbAutoTourType.setMaxWidth(140);
13957 bdfAutoTourLimite.setLayoutX(240);
13958 bdfAutoTourLimite.setLayoutY(240);
13959 bdfAutoTourLimite.setMaxWidth(70);
13961 lblN.setLayoutX(210);
13962 lblN.setLayoutY(245);
13963 cbAutoTourType.disableProperty().bind(cbAutoTourDemarrage.selectedProperty().not());
13964 bdfAutoTourLimite.disableProperty().bind(cbAutoTourDemarrage.selectedProperty().not());
13966 cbAutoRotationVitesse.getSelectionModel().selectedIndexProperty().addListener((
ov,
av,
nv) -> {
13967 if (cbAutoRotationVitesse.getSelectionModel().getSelectedIndex() == 3) {
13968 bdfAutoRotationVitesse.setDisable(false);
13969 setiAutoRotationVitesse(bdfAutoRotationVitesse.getNumber().toBigInteger().intValue());
13971 bdfAutoRotationVitesse.setDisable(true);
13972 setiAutoRotationVitesse(10 * (cbAutoRotationVitesse.getSelectionModel().getSelectedIndex() + 1));
13975 cbIntroPetitePlanete.selectedProperty().addListener((
ov,
av,
nv) -> {
13976 setbIntroPetitePlanete(
nv);
13979 cbAutoRotationDemarrage.selectedProperty().addListener((
ov,
av,
nv) -> {
13980 setbAutoRotationDemarre(
nv);
13981 poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre());
13984 setiAutoRotationVitesse(
nv.toBigInteger().intValue());
13987 cbAutoTourType.getSelectionModel().selectedIndexProperty().addListener((
ov,
av,
nv) -> {
13988 if (cbAutoTourType.getSelectionModel().getSelectedIndex() == 0) {
13989 setStrAutoTourType(
"tours");
13991 setStrAutoTourType(
"secondes");
13994 cbAutoTourDemarrage.selectedProperty().addListener((
ov,
av,
nv) -> {
13995 setbAutoTourDemarre(
nv);
13996 poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre());
13997 getGestionnaireInterface().getApBtnVA().setDisable(!
nv);
14000 setiAutoTourLimite(
nv.toBigInteger().intValue());
14003 setiAutoTourDemarrage(
nv.toBigInteger().intValue());
14007 cbAutoRotationDemarrage,
14009 cbAutoRotationVitesse, bdfAutoRotationVitesse,
lblUnites,
14011 cbAutoTourDemarrage,
14014 cbAutoTourType,
lblN, bdfAutoTourLimite
14030 retirePanoCourant();
14040 String strRepertPano = getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().substring(
14041 0, getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().
lastIndexOf(
File.separator));
14053 setbDejaSauve(
false);
14054 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14064 .getName()).log(
Level.SEVERE,
null,
ex);
14084 affichePanoChoisit(getiPanoActuel());
14085 if (apListePanoTriable !=
null) {
14086 apParametresVisite.getChildren().remove(
14090 ordPano.rafraichitListe();
14091 ordPano.ajouteNouveauxPanos();
14092 apListePanoTriable = ordPano.getApListePanoramiques();
14093 apListePanoTriable.setMaxHeight(apListePanoTriable.getPrefHeight());
14094 apListePanoTriable.setMinHeight(apListePanoTriable.getPrefHeight());
14095 apListePanoTriable.setVisible(
true);
14096 apParametresVisite.getChildren().remove(apListePanoTriable);
14097 apParametresVisite.getChildren().add(apListePanoTriable);
14098 apListePanoTriable.setLayoutX(40);
14099 apListePanoTriable.setLayoutY(130);
14100 apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20);
14101 if (apParametresVisite.isVisible()) {
14102 apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20);
14103 apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20);
14106 rafraichitListePano();
14126 clickBtnValidePano();
14129 slMinLat =
new Slider(-90, -45, -90);
14130 slMinLat.setDisable(
true);
14131 slMaxLat =
new Slider(45, 90, 90);
14132 slMaxLat.setDisable(
true);
14133 cbMinLat =
new CheckBox(rbLocalisation.getString(
"main.blocageNadir"));
14134 cbMaxLat =
new CheckBox(rbLocalisation.getString(
"main.blocageZenith"));
14135 slMinFov =
new Slider(5, 70, 12);
14136 slMaxFov =
new Slider(5, 70, 70);
14139 slMinLat.disableProperty().bind(cbMinLat.selectedProperty().not());
14140 slMaxLat.disableProperty().bind(cbMaxLat.selectedProperty().not());
14141 slMinLat.setLayoutX(10);
14142 slMinLat.setLayoutY(160);
14143 cbMinLat.setLayoutX(190);
14144 cbMinLat.setLayoutY(160);
14145 slMaxLat.setLayoutX(10);
14146 slMaxLat.setLayoutY(190);
14147 cbMaxLat.setLayoutX(190);
14148 cbMaxLat.setLayoutY(190);
14149 slMinFov.setLayoutX(10);
14150 slMinFov.setLayoutY(220);
14153 slMaxFov.setLayoutX(10);
14154 slMaxFov.setLayoutY(250);
14160 ligNadir =
new Line();
14161 ligNadir.setVisible(
false);
14162 ligNadir.setStroke(
Color.YELLOW);
14163 ligNadir.setStrokeWidth(2);
14164 ligZenith =
new Line();
14165 ligZenith.setVisible(
false);
14166 ligZenith.setStroke(
Color.YELLOW);
14167 ligZenith.setStrokeWidth(2);
14168 ligNadir.visibleProperty().bind(cbMinLat.selectedProperty());
14169 ligZenith.visibleProperty().bind(cbMaxLat.selectedProperty());
14172 setbDejaSauve(
false);
14173 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14175 getPanoramiquesProjet()[getiPanoActuel()].setFovMin((
double)
newValue);
14178 slMaxFov.setMin(
val1);
14180 if (navigateurPanoramique.
getFov() <
val1) {
14190 setbDejaSauve(
false);
14191 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14193 getPanoramiquesProjet()[getiPanoActuel()].setFovMax((
double)
newValue);
14196 slMinFov.setMax(
val1);
14198 if (navigateurPanoramique.
getFov() >
val1) {
14207 setbDejaSauve(
false);
14208 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14211 double X11 = ivImagePanoramique.getLayoutX();
14213 ligNadir.setStartX(
X11);
14214 ligNadir.setStartY(
Y1);
14216 ligNadir.setEndY(
Y1);
14217 getPanoramiquesProjet()[iPanoActuel].setMinLat((
double)
newValue);
14221 setbDejaSauve(
false);
14222 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14225 double X11 = ivImagePanoramique.getLayoutX();
14227 ligZenith.setStartX(
X11);
14228 ligZenith.setStartY(
Y1);
14230 ligZenith.setEndY(
Y1);
14231 getPanoramiquesProjet()[iPanoActuel].setMaxLat((
double)
newValue);
14234 cbMinLat.selectedProperty().addListener((
ov,
av,
nv) -> {
14235 setbDejaSauve(
false);
14236 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14239 double X11 = ivImagePanoramique.getLayoutX();
14241 ligNadir.setStartX(
X11);
14242 ligNadir.setStartY(
Y1);
14244 ligNadir.setEndY(
Y1);
14245 getPanoramiquesProjet()[iPanoActuel].setbMinLat(
nv);
14248 cbMaxLat.selectedProperty().addListener((
ov,
av,
nv) -> {
14249 setbDejaSauve(
false);
14250 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14253 double X11 = ivImagePanoramique.getLayoutX();
14255 ligZenith.setStartX(
X11);
14256 ligZenith.setStartY(
Y1);
14258 ligZenith.setEndY(
Y1);
14259 getPanoramiquesProjet()[iPanoActuel].setbMaxLat(
nv);
14263 setbDejaSauve(
false);
14264 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14266 for (
int i = 0;
i < iNombrePanoramiques;
i++) {
14267 getPanoramiquesProjet()[
i].setbMaxLat(getPanoramiquesProjet()[iPanoActuel].isbMaxLat());
14268 getPanoramiquesProjet()[
i].setbMinLat(getPanoramiquesProjet()[iPanoActuel].isbMinLat());
14269 getPanoramiquesProjet()[
i].setMaxLat(getPanoramiquesProjet()[iPanoActuel].getMaxLat());
14270 getPanoramiquesProjet()[
i].setMinLat(getPanoramiquesProjet()[iPanoActuel].getMinLat());
14271 getPanoramiquesProjet()[
i].setFovMax(getPanoramiquesProjet()[iPanoActuel].getFovMax());
14272 getPanoramiquesProjet()[
i].setFovMin(getPanoramiquesProjet()[iPanoActuel].getFovMin());
14280 slMaxLat, cbMaxLat,
14281 slMinLat, cbMinLat,
14306 taDescriptionIA.setPromptText(rbLocalisation.getString(
"main.descriptionIAPlaceholder"));
14310 if (getPanoramiquesProjet() !=
null && getiPanoActuel() >= 0 && getiPanoActuel() < getiNombrePanoramiques()) {
14311 getPanoramiquesProjet()[getiPanoActuel()].setStrDescriptionIA(
newValue);
14312 setbDejaSauve(
false);
14313 getStPrincipal().setTitle(getStPrincipal().
getTitle().
replace(
" *",
"") +
" *");
14323 lblAvertissementIA.setStyle(
"-fx-font-size: 12px; -fx-text-fill: #FF8C00; -fx-font-style: italic; -fx-font-weight: bold;");
14337 lblModeIA.setStyle(
"-fx-font-size: 11px;");
14351 toggleModeIA.setStyle(
"-fx-background-color: #4A90E2; -fx-text-fill: white;");
14355 toggleModeIA.setStyle(
"-fx-background-color: #2ECC71; -fx-text-fill: white;");
14364 toggleModeIA.setStyle(
"-fx-background-color: #4A90E2; -fx-text-fill: white;");
14366 System.out.println(
"[IA] 🔸 Mode basculé: Ollama (offline)");
14370 toggleModeIA.setStyle(
"-fx-background-color: #2ECC71; -fx-text-fill: white;");
14372 System.out.println(
"[IA] 🌐 Mode basculé: OpenRouter (online)");
14382 apOpenLayers.setVisible(
false);
14383 apOpenLayers.getStyleClass().add(
"dialog-content-pane");
14384 if (isbInternet()) {
14386 navigateurOpenLayers.setBingApiKey(getStrBingAPIKey());
14387 tfLongitude =
new TextField();
14388 tfLatitude =
new TextField();
14389 apOpenLayers = navigateurOpenLayers.afficheNavigateurOpenLayer(tfLongitude, tfLatitude,
true);
14390 apOpenLayers.setPrefSize(900, 650);
14391 apOpenLayers.setMinSize(900, 650);
14392 apOpenLayers.setMaxSize(900, 650);
14400 if (!isbInternet()) {
14407 navigateurOpenLayers.ensureNavigateurCarteInitialized();
14410 apOpenLayers.setVisible(
true);
14426 if (navigateurOpenLayers.isbDebut()) {
14427 Platform.runLater(() -> {
14428 navigateurOpenLayers.retireMarqueur(0);
14429 if (navigateurOpenLayers.getBingApiKey().equals(
"")) {
14430 navigateurOpenLayers.afficheCartesOpenlayer();
14432 navigateurOpenLayers.valideBingApiKey(navigateurOpenLayers.getBingApiKey());
14435 if (panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation() != null) {
14436 CoordonneesGeographiques coords = panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation();
14437 System.out.println(
"📍 Positionnement sur coordonnées: " + coords.getLatitude() +
", " + coords.getLongitude());
14438 navigateurOpenLayers.allerCoordonnees(coords, 17);
14439 navigateurOpenLayers.setMarqueur(coords);
14441 String strFichierPano = getPanoramiquesProjet()[getiPanoActuel()]
14442 .getStrNomFichier().substring(getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier()
14443 .lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[getiPanoActuel()]
14444 .getStrNomFichier().length()).split(
"\\.")[0];
14445 String strHTML =
"<span style='font-family : Verdana,Arial,sans-serif;font-weight:bold;font-size : 12px;'>"
14446 + getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique()
14448 +
"<span style='font-family : Verdana,Arial,sans-serif;bold;font-size : 10px;'>"
14451 strHTML = strHTML.replace(
"\\",
"/");
14452 navigateurOpenLayers.ajouteMarqueur(0, coords, strHTML);
14454 System.out.println(
"📍 Pas de coordonnées préexistantes - carte centrée par défaut");
14473 tfLatitude.setLayoutX(210);
14474 tfLatitude.setLayoutY(10);
14475 tfLatitude.setPrefWidth(150);
14476 tfLatitude.setPromptText(
"Latitude (ex: 48°51'29.6\"N)");
14478 tfLongitude.setLayoutX(210);
14479 tfLongitude.setLayoutY(40);
14480 tfLongitude.setPrefWidth(150);
14481 tfLongitude.setPromptText(
"Longitude (ex: 2°17'30.5\"E)");
14483 apOpenLayers.setLayoutX(200);
14484 apOpenLayers.setLayoutY(150);
14485 apOpenLayers.setVisible(
false);
14492 setApGEO(
new AnchorPane(getPoGeolocalisation().getApPaneOutil()));
14494 apOpenLayers.setLayoutX((
iLargeur - apOpenLayers.getPrefWidth()) / 2);
14495 apOpenLayers.setLayoutY((
iHauteur - apOpenLayers.getPrefHeight()) / 2);
14496 apOpenLayers.visibleProperty().addListener((
ov,
av,
nv) -> {
14497 mbarPrincipal.setDisable(
nv);
14498 hbBarreBouton.setDisable(
nv);
14499 tpEnvironnement.setDisable(
nv);
14504 apVisuPanoramique.setLayoutY(40);
14505 apVisuPanoramique.setPrefWidth(340);
14506 apVisuPanoramique.setPrefHeight(295);
14508 setApVISU(
new AnchorPane(
new PaneOutil(
true, rbLocalisation.getString(
"main.visualisation"), apVisuPanoramique,
largeurOutil).getApPaneOutil()));
14510 vbVisuHotspots =
new VBox();
14515 apVisuHS.setLayoutY(40);
14516 apHS1 =
new PaneOutil(
true,
"Hotspots", apVisuHS,
largeurOutil);
14520 getVbChoixPanoramique().getChildren().addAll(getApPVIS(), getApAR(), getApPPAN(), getApDESCIA(), getApGEO(), getApVISU(), getApHS());
14521 getVbChoixPanoramique().setSpacing(-5);
14522 vbOutils.getChildren().addAll(getVbChoixPanoramique());
14523 getVbChoixPanoramique().setVisible(
false);
14530 hbCoordonnees =
new HBox();
14531 panePanoramique =
new Pane();
14533 lblLong =
new Label(
"");
14534 lblLat =
new Label(
"");
14542 spVuePanoramique.setPrefSize(
iLargeur - largeurOutils - 20,
iHauteur - 110);
14543 spVuePanoramique.setMaxSize(
iLargeur - largeurOutils - 20,
iHauteur - 110);
14544 spVuePanoramique.setVbarPolicy(
ScrollPane.ScrollBarPolicy.NEVER);
14545 spVuePanoramique.setHbarPolicy(
ScrollPane.ScrollBarPolicy.NEVER);
14546 spVuePanoramique.setTranslateY(5);
14554 spPanneauOutils.setContent(vbOutils);
14555 spPanneauOutils.setVbarPolicy(
ScrollPane.ScrollBarPolicy.AS_NEEDED);
14556 spPanneauOutils.setHbarPolicy(
ScrollPane.ScrollBarPolicy.NEVER);
14557 spPanneauOutils.setPrefSize(largeurOutils,
iHauteur - 112);
14558 spPanneauOutils.setMaxWidth(largeurOutils);
14559 spPanneauOutils.setMaxHeight(
iHauteur - 112);
14560 spPanneauOutils.setLayoutY(0);
14561 spPanneauOutils.setLayoutX(0);
14565 panePanoramique.setCursor(
Cursor.CROSSHAIR);
14566 vbOutils.setPrefWidth(largeurOutils - 20);
14567 vbOutils.minHeight(
iHauteur - 110);
14568 vbOutils.setLayoutX(3);
14569 lblLong.setPrefSize(100, 15);
14570 lblLat.setPrefSize(100, 15);
14571 lblLat.setTranslateX(50);
14572 apPanneauPrincipal.setPrefSize(
iLargeur - largeurOutils - 20,
iHauteur - 110);
14573 apListeImagesPanoramiques =
new AnchorPane();
14574 apListeImagesPanoramiques.getStyleClass().add(
"dialog-content-pane");
14575 apListeImagesPanoramiques.setPrefWidth(iLargeurVignettes + 40);
14576 apListeImagesPanoramiques.setMinWidth(iLargeurVignettes + 40);
14577 apListeImagesPanoramiques.setMaxWidth(iLargeurVignettes + 40);
14578 apListeImagesPanoramiques.setPrefHeight(
iHauteur - 140);
14579 apListeImagesPanoramiques.setLayoutX(-iLargeurVignettes - 30);
14580 apListeImagesPanoramiques.setLayoutY(0);
14582 apListeImagesPanoramiques.setOnMouseEntered((
e) -> {
14583 apListeImagesPanoramiques.setLayoutX(0);
14585 apListeImagesPanoramiques.setOnMouseExited((
e) -> {
14586 apListeImagesPanoramiques.setLayoutX(-iLargeurVignettes - 30);
14592 lblVignettes.getStyleClass().add(
"dialog-content-pane");
14598 apVignettesPano.setPrefWidth(iLargeurVignettes + 10);
14599 apVignettesPano.setMinHeight(
iHauteur - 140);
14600 apVignettesPano.setStyle(
"-fx-background-color:-fx-base;");
14601 rectVignettePano =
new Rectangle(0, 0, iLargeurVignettes, iLargeurVignettes / 2.
d);
14602 rectVignettePano.setLayoutX(5);
14603 rectVignettePano.setLayoutY(10);
14604 rectVignettePano.setFill(
Color.web(
"#fff", 0.5));
14605 rectVignettePano.setStroke(
Color.WHITE);
14606 rectVignettePano.setStrokeWidth(2.0);
14607 rectVignettePano.setVisible(
false);
14608 apVignettesPano.getChildren().add(rectVignettePano);
14614 +
"-fx-border-color: derive(-fx-base,10%);"
14615 +
"-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.2) , 8, 0.0 , 0 , 8 );"
14616 +
"-fx-border-width: 1px;");
14619 ivImagePanoramique.setCache(
true);
14621 ivImagePanoramique.setFitWidth(
largeur);
14622 ivImagePanoramique.setFitHeight(
largeur / 2.0
d);
14623 ivImagePanoramique.setLayoutX((largeurMax -
largeur) / 2.
d);
14624 panePanoramique.getChildren().add(ivImagePanoramique);
14625 panePanoramique.setPrefSize(ivImagePanoramique.getFitWidth(), ivImagePanoramique.getFitHeight());
14626 panePanoramique.setMaxSize(ivImagePanoramique.getFitWidth(), ivImagePanoramique.getFitHeight());
14628 panePanoramique.setLayoutY(20);
14629 lblLong.setTranslateX(50);
14630 lblLat.setTranslateX(80);
14631 hbCoordonnees.getChildren().setAll(lblLong, lblLat);
14632 spVuePanoramique.setContent(apPanneauPrincipal);
14635 apEnvironnement.getStyleClass().add(
"dialog-content-pane");
14638 getApAttends().getStyleClass().add(
"dialog-content-pane");
14639 getApAttends().setPrefHeight(250);
14640 getApAttends().setPrefWidth(600);
14641 getApAttends().setMaxWidth(600);
14642 getApAttends().setStyle(
"-fx-border-color: derive(-fx-base,10%);"
14643 +
"-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.5) , 8, 0.0 , 0 , 8 );"
14644 +
"-fx-border-width: 1px;");
14648 pbarAvanceChargement.setPrefSize(400, 30);
14649 pbarAvanceChargement.setLayoutX((getApAttends().
getPrefWidth() - pbarAvanceChargement.getPrefWidth()) / 2);
14650 pbarAvanceChargement.setLayoutY(70);
14654 lblAttends.setStyle(
"-fx-background-color : #777;");
14658 lblCharge =
new Label();
14659 lblCharge.setMinWidth(600);
14660 lblCharge.setLayoutY(150);
14661 lblCharge.setAlignment(
Pos.CENTER);
14662 lblNiveaux =
new Label();
14663 lblNiveaux.setMinWidth(600);
14664 lblNiveaux.setLayoutY(180);
14665 lblNiveaux.setAlignment(
Pos.CENTER);
14666 getApAttends().getChildren().addAll(
lblAttends, pbarAvanceChargement, lblCharge, lblNiveaux);
14667 getApAttends().setVisible(
false);
14668 apEnvironnement.getChildren().addAll(tpEnvironnement, getApAttends());
14670 apEnvironnement.setTranslateY(-30);
14672 vbRacine.getChildren().addAll(apEnvironnement);
14673 apPanneauPrincipal.getChildren().setAll(hbCoordonnees, panePanoramique);
14676 lblDragDrop =
new Label(rbLocalisation.getString(
"main.dragDrop"));
14677 lblDragDrop.setMinHeight(spVuePanoramique.getPrefHeight());
14678 lblDragDrop.setMaxHeight(spVuePanoramique.getPrefHeight());
14679 lblDragDrop.setMinWidth(spVuePanoramique.getPrefWidth());
14680 lblDragDrop.setMaxWidth(spVuePanoramique.getPrefWidth());
14681 lblDragDrop.setAlignment(
Pos.CENTER);
14682 lblDragDrop.setTextFill(
Color.web(
"#c9c7c7"));
14684 lblDragDrop.setWrapText(
true);
14685 lblDragDrop.setStyle(
"-fx-font-size:72px");
14686 lblDragDrop.setTranslateY(-100);
14688 apLoupe.setLayoutX(35);
14689 apLoupe.setLayoutY(35);
14690 apLoupe.setVisible(
false);
14692 apPanneauPrincipal.getChildren().addAll(lblDragDrop, spAfficheLegende(), apLoupe, apListeImagesPanoramiques);
14695 apCreationBarre.setVisible(
false);
14697 apCreationDiaporama.setVisible(
false);
14698 apEnvironnement.getChildren().addAll(apCreationBarre, apCreationDiaporama, apOpenLayers);
14711 if (
strTexte.split(
"=").length > 1) {
14717 case "typeFichiersTransf":
14718 setStrTypeFichierTransf(
valeur);
14720 case "tailleLoupe":
14723 case "afficheLoupe":
14724 setAfficheLoupe(
valeur.equals(
"true"));
14732 case "netteteTransf":
14733 setbNetteteTransf(
valeur.equals(
"true"));
14735 case "niveauNetteteTransf":
14738 case "dernierRepertoireVisite":
14739 setStrDernierRepertoireVisite(
valeur);
14741 case "dernierRepertoireImages":
14742 setStrDernierRepertoireImages(
valeur);
14744 case "openrouterModel":
14745 if (!
valeur.isEmpty()) {
14747 System.out.println(
"[Config] 🤖 Modèle OpenRouter chargé: " +
valeur);
14750 case "ollamaModel":
14751 if (!
valeur.isEmpty()) {
14753 System.out.println(
"[Config] 🤖 Modèle Ollama chargé: " +
valeur);
14757 boolean gpuEnabled =
valeur.equals(
"true");
14759 System.out.println(
"[Config] 🎮 GPU " + (gpuEnabled ?
"activé" :
"désactivé"));
14793 strContenuFichier +=
"dernierRepertoireVisite=" + getStrDernierRepertoireVisite() +
"\n";
14794 strContenuFichier +=
"dernierRepertoireImages=" + getStrDernierRepertoireImages() +
"\n";
14802 .getName()).log(
Level.SEVERE,
null,
ex);
14810 .getName()).log(
Level.SEVERE,
null,
ex);
14817 .getName()).log(
Level.SEVERE,
null,
ex);
14850 System.out.println(
"✅ Serveur HTTP réinitialisé au démarrage");
14852 System.err.println(
"⚠️ Erreur lors de la réinitialisation du serveur HTTP : " +
e.getMessage());
14859 System.out.println(
"[GPU] ℹ️ Aucun GPU OpenCL détecté - Les transformations utiliseront le CPU");
14862 System.out.println(
"[GPU] ⚠️ Erreur lors de l'initialisation GPU : " +
e.getMessage());
14869 setbInternet(netIsAvailable());
14870 setStrCurrentDir(fileRep.getAbsolutePath());
14871 setStrRepertAppli(fileRep.getAbsolutePath());
14872 fileRepertConfig =
new File(getStrRepertAppli() +
File.separator +
"configPV");
14873 rbLocalisation =
ResourceBundle.getBundle(
"editeurpanovisu.i18n.PanoVisu", getLocale());
14885 System.err.println(
"Impossible de lire project.properties : " +
e.getMessage());
14887 strNumVersion =
version +
"-b" + rbLocalisation.getString(
"build.numero").replace(
" ",
"").replace(
" ",
"");
14892 getStPrincipal().setAlwaysOnTop(
false);
14893 getStPrincipal().setTitle(
"PanoVisu v" + strNumVersion.split(
"-")[0]);
14913 deleteDirectory(getStrRepertTemp());
14916 setStrRepertTemp(getStrRepertTemp() +
File.separator +
"temp" +
strExtTemp);
14919 installeEvenements();
14923 sauvePreferences();
14931 if (!isbDejaSauve()) {
14933 alert.setTitle(rbLocalisation.getString(
"main.dialog.quitterApplication"));
14934 alert.setHeaderText(
null);
14935 alert.setContentText(rbLocalisation.getString(
"main.dialog.chargeProjetMessage"));
14936 alert.getButtonTypes().clear();
14947 .getName()).log(
Level.SEVERE,
null,
ex);
14952 sauveHistoFichiers();
14956 .getName()).log(
Level.SEVERE,
null,
ex);
14962 System.out.println(
"✅ Serveur HTTP arrêté lors de la fermeture de l'application");
14964 System.err.println(
"⚠️ Erreur lors de l'arrêt du serveur HTTP : " +
ex.getMessage());
14967 deleteDirectory(getStrRepertTemp());
14987 root.setAlignment(
Pos.TOP_CENTER);
14990 lblTitle.setStyle(
"-fx-font-size: 15px; -fx-font-weight: bold;");
14998 lblLight.setStyle(
"-fx-font-size: 13px; -fx-font-weight: bold;");
15007 rb.setUserData(
theme);
15008 if (
theme == currentTheme) {
15009 rb.setSelected(
true);
15016 lblDark.setStyle(
"-fx-font-size: 13px; -fx-font-weight: bold;");
15022 rb.setUserData(
theme);
15023 if (
theme == currentTheme) {
15024 rb.setSelected(
true);
15041 scrollPane.setStyle(
"-fx-background-color: transparent;");
15057 getGestionnaireInterface().mettreAJourCouleursHotspots();
15067 root.getChildren().addAll(
15104 System.setProperty(
"file.encoding",
"UTF-8");
15105 setStrSystemeExploitation(
System.getProperty(
"os.name"));
OpenLayers Geometry Point
OpenLayers Geometry Polygon
Classe de remplacement pour jfxtras.labs.scene.control.BigDecimalField qui n'est plus disponible dans...
ObjectProperty< BigDecimal > numberProperty()
Obtient la propriété du nombre.
void setNumber(BigDecimal value)
Définit la valeur BigDecimal.
Affichage de la fenêtre de configuration.
Contrôleur pour le dialogue de conversion d'images au ratio 2:1.
static String toDMS(double degDecimal)
double getLongitude()
Retourne la valeur de longitude.
void setLongitude(double longitude)
Définit la valeur de longitude.
void setLatitude(double latitude)
Définit la valeur de latitude.
double getLatitude()
Retourne la valeur de latitude.
void setStrNomDiaporama(String nomDiaporama)
Définit le nom du diaporama.
void setStrFichiersImage(String[] strImages)
Définit le tableau complet des fichiers images.
String[] getStrFichiersImage()
Retourne le tableau complet des fichiers images du diaporama.
void setStrCouleurFondDiaporama(String strCouleurFondDiaporama)
Définit la couleur de fond du diaporama.
int getiNombreImages()
Retourne le nombre d'images dans le diaporama.
String getStrFichierDiaporama()
Retourne le nom du fichier de configuration du diaporama.
String[] getStrLibellesImages()
Retourne le tableau complet des libellés des images.
String getStrCouleurFondDiaporama()
Retourne la couleur de fond du diaporama.
void setDelaiDiaporama(double delaiDiaporama)
Définit le délai d'affichage entre les images.
void setStrLibellesImages(String[] strLibellesImages)
Définit le tableau complet des libellés.
double getDelaiDiaporama()
Retourne le délai d'affichage entre les images.
void setStrFichierDiaporama(String strFichierDiaporama)
Définit le nom du fichier de configuration.
void setStrFichiers(String[] strFichiers)
Définit le tableau complet des noms de fichiers.
String[] getStrFichiers()
Retourne le tableau complet des noms de fichiers.
String getStrNomDiaporama()
Retourne le nom du diaporama.
void setiNombreImages(int iNombreImages)
Définit le nombre d'images dans le diaporama.
double getOpaciteDiaporama()
Retourne l'opacité du fond du diaporama.
void setOpaciteDiaporama(double opaciteDiaporama)
Définit l'opacité du fond du diaporama.
Dialogue pour afficher la documentation au format Markdown.
static void afficher()
Méthode statique pour afficher le dialogue.
Editeur de visites virtuelles panoramiques.
static void setStrDernierRepertoireVisite(String aStrDernierRepertoireVisite)
Définit la valeur de strDernierRepertoireVisite.
static MenuItem mniOutilsLoupe
static Plan[] plans
Tableau des plans du projet.
static void ajouteAffichagePointsHotspotsDiapo()
static String strDernierRepertoireImages
Dernier répertoire utilisé pour le chargement d'images.
static final String[] strHistoFichiers
static String strStyleCSS
Style CSS de l'interface utilisateur.
static ImageView ivVisiteGenere
static AnchorPane apVISU
Elément barre d'outils.
static MenuItem mniAffichageInterface
static MenuItem mniNouveauProjet
static final double[] pointsPolyZone
static void aideapropos()
static HBox hbBarreBouton
static File fileHistoFichiers
static void panoAjouteHTML(double X, double Y)
static void setScnPrincipale(Scene aScnPrincipale)
Définit la valeur de scnPrincipale.
static MenuItem mniDocumentation
static void ajouteAffichagePointsHotspotsHTML()
static void setLocale(Locale aLocale)
Définit la valeur de locale.
static void setApAR(AnchorPane aApAR)
Définit la valeur de apAR.
static ImageView loadSvgIcon(String iconName, int size, javafx.scene.paint.Color color)
Charge une icône SVG avec couleur personnalisée.
static int iAutoTourLimite
static String getStrTooltipStyle()
Retourne la valeur de strTooltipStyle.
static void transformationEqui2Cube()
static ImageView ivAjouterPlan
static String strBingAPIKey
static MenuItem mniEqui2CubeTransformation
static String strTexteHisto
static double positLoupeY
static void setiPanoActuel(int aiPanoActuel)
Définit la valeur de iPanoActuel.
static void sauveHistoFichiers()
static String getStrTypeFichierTransf()
Retourne la valeur de strTypeFichierTransf.
static final ImageView ivLoupe
static void panoAjouteDiaporama(double X, double Y)
static void setStrCurrentDir(String aStrCurrentDir)
Définit la valeur de strCurrentDir.
static int getiNombrePlans()
Retourne la valeur de iNombrePlans.
static MenuItem mniAjouterPano
static double getNiveauNetteteTransf()
Retourne la valeur de niveauNetteteTransf.
static String strListePano()
Retourne la liste des panoramiques sous forme de chaine séparés par des points virgule.
static ImageView loadSvgIcon(String iconName, int width, int height, javafx.scene.paint.Color color)
Charge une icône SVG avec dimensions rectangulaires personnalisées.
static MenuItem mniRedimensionnerImages
MenuItem pour l'outil de redimensionnement et compression d'images Permet de traiter des images par l...
static MenuButton btnMnuPanoramique
static AnchorPane getApDESCIA()
Retourne la valeur de apDESCIA.
static Tab getTabPlan()
Retourne la valeur de tabPlan.
static void setStrRepertTemp(String aStrRepertTemp)
Définit la valeur de strRepertTemp.
static String strDecodeFichier(String strFichier)
static void setStrRepertoireProjet(String aStrRepertoireProjet)
Définit la valeur de strRepertoireProjet.
static void retireAffichagePointsHotSpots()
static MenuItem mniFermerProjet
static void setGestionnaireInterface(GestionnaireInterfaceController aGestionnaireInterface)
Définit la valeur de gestionnaireInterface.
static void setGestionnairePlan(GestionnairePlanController aGestionnairePlan)
Définit la valeur de gestionnairePlan.
static TextField tfLongitude
static String strTypeFichierTransf
static int iCreeNiveauxImageEqui(String strFichierImage, String strNomFichierSauvegarde, String strRepertoire, int iNumPanoXML, int iNumero, int iTotal)
static void setApDESCIA(AnchorPane aApDESCIA)
Définit la valeur de apDESCIA.
static void setApGEO(AnchorPane aApGEO)
Définit la valeur de apGEO.
static void retirePanoCourant()
static void reinitialiserProjet()
Réinitialise complètement toutes les données du projet.
static PaneOutil poGeolocalisation
static int iLargeurInterface
static void setAfficheLoupe(boolean aAfficheLoupe)
Définit la valeur de afficheLoupe.
static void main(String[] args)
Point d'entrée principal de l'application.
static AnchorPane apGEO
Elément barre d'outils.
static void afficheBarrePersonnalisee(int iLargeur, int iHauteur, boolean bMasqueZones)
static void setLargeurE2C(double aLargeurE2C)
Définit la valeur de largeurE2C.
void start(Stage stPrimaryStage)
Méthode de démarrage de l'application JavaFX.
static AnchorPane apHS
Elément barre d'outils.
static int getiNumPoints()
Retourne la valeur de iNumPoints.
static void setStPrincipal(Stage aStPrincipal)
Définit la valeur de stPrincipal.
static int getiNumDiapo()
Retourne la valeur de iNumDiapo.
static Menu mnuDerniersProjets
static boolean bAutoTourDemarre
static AnchorPane apVisuPano
static CheckBox cbAutoTourDemarrage
static Rectangle rectVignettePano
static MenuItem mniAffichagePlan
static String strCurrentDir
Répertoire courant de l'application.
static void genererDescriptionIA(TextArea taDescriptionIA)
Génère une description IA pour le panoramique courant.
static void generateVisitFilesInTemp()
Méthode temporaire - génère les fichiers de visite dans le répertoire temp TODO: Refactoriser pour ex...
static double getHauteurE2C()
Retourne la valeur de hauteurE2C.
static String strPanoAffiche
static final ComboBox cbListeChoixPanoramique
static void setbPetitePlaneteDemarrage(boolean abPetitePlaneteDemarrage)
Définit la valeur de bPetitePlaneteDemarrage.
static String getStrStyleCSS()
Retourne la valeur de strStyleCSS.
static void setApPPAN(AnchorPane aApPPAN)
Définit la valeur de apPPAN.
static void addDirectoryToZip(File rootDir, File sourceDir, ZipOutputStream zos)
Ajoute récursivement un répertoire au ZIP.
static void setMniAffichagePlan(MenuItem aMniAffichagePlan)
Définit la valeur de mniAffichagePlan.
static AnchorPane apDESCIA
Elément barre d'outils - Description IA.
static void setStrRepertHSImages(String aStrRepertHSImages)
Définit la valeur de strRepertHSImages.
static void setbAutoRotationDemarre(boolean abAutoRotationDemarre)
Définit la valeur de bAutoRotationDemarre.
void creeEnvironnement(Stage stPrimaryStage)
static String getStrBingAPIKey()
Retourne la valeur de strBingAPIKey.
static AnchorPane apListePanoTriable
static boolean afficheLoupe
static void setStrPanoListeVignette(String aStrPanoListeVignette)
Définit la valeur de strPanoListeVignette.
static void setTabPlan(Tab aTabPlan)
Définit la valeur de tabPlan.
static int getiNumImages()
Retourne la valeur de iNumImages.
static ScrollPane spVuePanoramique
static String getStrAutoTourType()
Retourne la valeur de strAutoTourType.
static String strNomFichierShp
static TextField tfLatitude
static MenuButton btnMnuTransformation
static String sauvegardeIconeHotspot(Image image, String prefixe, int index, int numPano)
Sauvegarde une image de hotspot dans le répertoire temp et retourne le nom du fichier.
static double niveauNetteteTransf
static void setiDecalageMac(int aiDecalageMac)
Définit la valeur de iDecalageMac.
static String sauvegardeIconeHotspot(WritableImage imageColoree, String prefixe, int index, int numPano)
Sauvegarde une image de hotspot colorée dans le répertoire temp et retourne le nom du fichier.
static VBox vbVisuHotspots
String strGenereChaineAleatoire(int iNombre)
static void rechargerIcones()
Recharge toutes les icônes SVG de la barre d'outils.
static void panoChoixRegard(double X, double Y)
static MenuItem mniSauveProjet
static void ajouteAffichagePointsHotspotsImage()
static int iAutoTourDemarrage
static ImageView ivSauveProjet
static AnchorPane getApHS()
Retourne la valeur de apHS.
static int iAutoRotationVitesse
static void setbInternet(boolean abInternet)
Définit la valeur de bInternet.
static String strAutoTourType
static final int iTailleLoupeMin
static void setiNombrePanoramiquesFichier(int aiNombrePanoramiquesFichier)
Définit la valeur de iNombrePanoramiquesFichier.
static MenuBar mbarPrincipal
static Diaporama[] diaporamas
static int getiAutoRotationVitesse()
Retourne la valeur de iAutoRotationVitesse.
static MenuItem mniSauveSousProjet
static int getiAutoTourDemarrage()
Retourne la valeur de iAutoTourDemarrage.
static String getStrDernierRepertoireImages()
Retourne la valeur de strDernierRepertoireImages.
static int iNombrePointsZone
static Image imgTransformationImage(Image imgRect, int iRapport)
static ImageView getIvAjouterPlan()
Retourne la valeur de ivAjouterPlan.
static AnchorPane getApGEO()
Retourne la valeur de apGEO.
static String[] getStrCodesLanguesTraduction()
Retourne la valeur de strCodesLanguesTraduction.
static AnchorPane apCreationDiaporama
static void ajoutePanoramiqueProjet(String strFichierPano, String typePano, int iNumero, int iTotal)
static MenuItem mniSauverModele
static void ajouteAffichagePointsHotspots()
static void setApPVIS(AnchorPane aApPVIS)
Définit la valeur de apPVIS.
static CheckBox cbIntroPetitePlanete
static VBox getVbChoixPanoramique()
Retourne la valeur de vbChoixPanoramique.
static AnchorPane apAfficherListePanosVignettes(int iNumHS)
static final String[] strLanguesTraduction
Noms des langues affichés dans l'interface.
static boolean isbPetitePlaneteDemarrage()
Retourne la valeur de bPetitePlaneteDemarrage.
static Task tskChargeListeFichiers(final File[] listFichiers, int iNb)
static String suprimeEspaceFin(String strChaine)
static void setTabInterface(Tab aTabInterface)
Définit la valeur de tabInterface.
static void setStrTypeFichierTransf(String aStrTypeFichierTransf)
Définit la valeur de strTypeFichierTransf.
static void setbNetteteTransf(boolean abNetteteTransf)
Définit la valeur de bNetteteTransf.
static AnchorPane apParametresVisite
static void setMniAjouterPlan(MenuItem aMniAjouterPlan)
Définit la valeur de mniAjouterPlan.
static MenuItem mniOutilsDiaporama
static void retireAffichageLigne()
static boolean bNetteteTransf
static int getiAutoTourLimite()
Retourne la valeur de iAutoTourVitesse.
static int getiNombreDiapo()
Retourne la valeur de iNombreDiapo.
static double positLoupeX
static void setStrRepertPanos(String aStrRepertPanos)
Définit la valeur de strRepertPanos.
static MenuItem mniConfigTransformation
static Scene scnPrincipale
static boolean bAutoRotationDemarre
static GestionnairePlanController gestionnairePlan
static PaneOutil getPoGeolocalisation()
Retourne la valeur de poGeolocalisation.
static void setbDejaSauve(boolean abDejaSauve)
Définit la valeur de bDejaSauve.
static String[] strDecode
static String getStrDernierRepertoireVisite()
Retourne la valeur de strDernierRepertoireVisite.
static void ajouterZone(int iLargeur, int iHauteur, boolean bMasqueZones)
static BigDecimalField bdfAutoTourLimite
static String getStrRepertoireProjet()
Retourne la valeur de strRepertoireProjet.
static AnchorPane apPPAN
Elément barre d'outils.
static void afficheHSImage(int i, double longitude, double latitude)
static ImageView ivRedimensionnerImages
ImageView pour l'icône de l'outil de redimensionnement et compression d'images dans la barre d'outils...
static AnchorPane apAttends
static ImageView ivAjouterPano
static AnchorPane getApPVIS()
Retourne la valeur de apPVIS.
static MenuItem mniOutilsBarre
static boolean bEstCharge
static MenuItem mniCreerZipVisite
static String strNumVersion
static int iNumeroPanoChoisitHS
static void setStrAutoTourType(String aStrAutoTourType)
Définit la valeur de strAutoTourType.
static void projetChargeNom(String strNomFich)
static void lisPreferences()
final static double largeurOutils
static AnchorPane apOpenLayers
static ObservableList< AncreForme > olCreeAncresPourPolygone(int iNumZone, final ObservableList< Double > points)
static void setApAttends(AnchorPane apAttends1)
Définit la valeur de apAttends.
static void creerZipFromDirectory(File sourceDir, File zipFile)
Crée un fichier ZIP à partir d'un répertoire.
static VBox vbChoixPanoramique
static final String[] strCodesLanguesTraduction
Codes des langues supportées pour la traduction.
static ImageView ivConvertirRatio2to1
ImageView pour l'icône de l'outil de conversion au ratio 2:1 dans la barre d'outils.
static Plan[] getPlans()
Retourne la valeur de plans.
static void setStrRepertAppli(String aStrRepertAppli)
Définit la valeur de strRepertAppli.
static String strRepertTemp
Répertoire temporaire de travail.
static MenuItem getMniAffichagePlan()
Retourne la valeur de mniAffichagePlan.
static Image imgBarrePersonnalisee
static void rafraichitListePano()
Rafraîchit la liste des panoramiques dans l'interface utilisateur.
static AnchorPane apAR
Elément barre d'outils.
static void setiNumImages(int aiNumImages)
Définit la valeur de iNumImages.
static void deleteDirectory(String strEmplacement)
Supprime récursivement un répertoire et tout son contenu.
static ImageView loadSvgIcon(String iconName, int size)
Charge une icône SVG avec la taille spécifiée.
static void setStrDernierRepertoireImages(String aStrDernierRepertoireImages)
Définit la valeur de strDernierRepertoireImages.
static void projetSauveSous()
static AnchorPane apVisuHS
static ResourceBundle rbLocalisation
Bundle de ressources pour la localisation.
static String strRepertAppli
Répertoire d'installation de l'application.
static void setiNumDiapo(int aiNumDiapo)
Définit la valeur de iNumDiapo.
static String strTitreVisite
static int iNumHTML
Compteur de fichiers HTML générés.
static AnchorPane apCreationBarre
static AnchorPane apImgBarrePersonnalisee
static AnchorPane getApAttends()
Retourne la valeur de apAttends.
static int iCreeNiveauxImageCube(String strFichierImage, String strRepertoire, int iNumPanoXML, String strFace)
static String[] getStrLanguesTraduction()
Retourne la valeur de strLanguesTraduction.
static void creeEnvironnement(Stage stPrimaryStage, int iLargeur, int iHauteur)
static Task tskAnalyseFichierPVU(final String strLigComplete)
static int iNombrePanoramiques
Nombre total de panoramiques dans le projet.
static AnchorPane getApAR()
Retourne la valeur de apAR.
static int getiTailleLoupe()
Retourne la valeur de iTailleLoupe.
static void modeleSauver()
static ToolBar bbarPrincipal
static ImageView ivCube2Equi
static void ajouteAffichageHotspots()
static void ouvrirOutilRedimensionnementImages()
Ouvre l'interface de l'outil de redimensionnement et compression d'images.
static void setiNombrePlans(int aiNombrePlans)
Définit la valeur de iNombrePlans.
static void copieFichierRepertoire(String strFichier, String strRepertoire)
Copie un fichier unique vers un répertoire de destination.
static NavigateurPanoramique navigateurPanoramique
static boolean dejaCharge
static Locale getLocale()
Retourne la valeur de locale.
static String strPositLoupe
static Menu mnuPanoramique
static final String strTooltipStyle
static void panoMouseClic(double X, double Y)
static ImageView ivChargeProjet
static void panoramiquesAjouter()
static ScrollPane spPanneauOutils
static void transformationCube2Equi()
static String getStrRepertTemp()
Retourne la valeur de strRepertTemp.
static void genereVisite()
Génère la visite virtuelle HTML complète.
static Panoramique[] getPanoramiquesProjet()
Retourne la valeur de panoramiquesProjet.
static NavigateurOpenLayers navigateurOpenLayers
static String strEncodeFichier(String strFichier)
static void setNiveauNetteteTransf(double aNiveauNetteteTransf)
Définit la valeur de niveauNetteteTransf.
static void setiNombreDiapo(int aiNombreDiapo)
Définit la valeur de iNombreDiapo.
static void projetsFermer()
static TabPane tpEnvironnement
static ObservableList< AncreForme > olCreeAncresPourCercle(int iNumZone, Circle cercle)
static int iNombrePanoramiquesFichier
Nombre de fichiers panoramiques chargés.
static CheckBox cbAutoRotationDemarrage
static ImageView ivNouveauProjet
static void choixZone(int iLargeur, int iHauteur, boolean bMasqueZones, String strIdZone, MouseEvent mouseEvent)
static void projetSauve()
static double getLargeurE2C()
Retourne la valeur de largeurE2C.
static String strRepertoireProjet
Répertoire de sauvegarde du projet courant.
static ScrollPane spAfficheLegende()
static void setHauteurE2C(double aHauteurE2C)
Définit la valeur de hauteurE2C.
static void setbAutoTourDemarre(boolean abAutoTourDemarre)
Définit la valeur de bAutoTourDemarre.
static AnchorPane apZoneBarrePersonnalisee
static ObservableList< AncreForme > olCreeAncresPourRectangle(int iNumZone, Rectangle rect)
static Tab getTabInterface()
Retourne la valeur de tabInterface.
static void creerZipVisite()
Crée un fichier ZIP contenant la visite virtuelle.
static MenuItem mniChargeProjet
static AnchorPane apPVIS
Elément barre d'outils.
static void setStrSystemeExploitation(String aStrSystemeExploitation)
Définit la valeur de strSystemeExploitation.
static boolean isAfficheLoupe()
Retourne la valeur de afficheLoupe.
static boolean isbInternet()
Retourne la valeur de bInternet.
static AnchorPane apVignettesPano
static void afficheHS(int i, double longitude, double latitude)
static void sauvePreferences()
Sauvegarde les préférences de l'application dans le fichier preferences.cfg.
static boolean bRepertSauveChoisi
static AnchorPane apListeImagesPanoramiques
static void setiTailleLoupe(int aiTailleLoupe)
Définit la valeur de iTailleLoupe.
static PopUpDialogController popUp
static void creerZipDepuisTemp()
Crée un fichier ZIP contenant la visite virtuelle depuis le répertoire temporaire.
static void afficheInfoPano()
static void sauveFichierProjet()
static Scene getScnPrincipale()
Retourne la valeur de scnPrincipale.
static void gereSourisPanoramique(MouseEvent mouseEvent)
static boolean isbAutoTourDemarre()
Retourne la valeur de bAutoTourDemarre.
static void projetCharge()
static final OrdrePanoramique ordPano
static void reconstruireIconeHotspot(Object hotspot, int numPano, int index, String prefixe, String nomFichierIconeDefaut)
Reconstruit une icône de hotspot colorée lors du chargement d'un projet.
static Pane panePanoramique
static final int iTailleLoupeMax
static void copieRepertoire(String strEmplacement, String strRepertoire)
Copie récursivement un répertoire et tout son contenu vers une destination.
static final String[] strTouchesBarre
static void panoChoixNord(double X)
static int iNumDiapo
Compteur de diaporamas.
static ImageView ivImagePanoramique
static void afficheNord(double longitude)
static void affichePoV(double longitude, double latitude, double fov)
Affiche la croix représentant le point de vue.
static void setbIntroPetitePlanete(boolean abIntroPetitePlanete)
Définit la valeur de bIntroPetitePlanete.
static Label lblChoixPanoramique
static HBox hbCoordonnees
static MenuItem mniVisiteGenere
static void affichePanoChoisit(int iNumPanochoisi)
static void creeVignettesHS()
static boolean bRecommenceZone
static int nombreHistoFichiers
static void afficheHSDiapo(int i, double longitude, double latitude)
static Locale locale
Locale de l'application.
static MenuItem mniChargerModele
static boolean bIntroPetitePlanete
static void setPanoramiquesProjet(Panoramique[] aPanoramiquesProjet)
Définit la valeur de panoramiquesProjet.
static String strNomPanoChoisitHS
static void afficheLoupe(double x, double y)
static void installeEvenements()
static int getiNumHTML()
Retourne la valeur de iNumHTML.
static void setApVISU(AnchorPane aApVISU)
Définit la valeur de apVISU.
static void creerEditerBarre(String strNomFichierBarre)
static int iHauteurInterface
static void setApHS(AnchorPane aApHS)
Définit la valeur de apHS.
static String strRepertPanos
Répertoire des images panoramiques.
static MenuItem mniAPropos
static boolean bPleinEcranPanoramique
static String getStrPanoListeVignette()
Retourne la valeur de strPanoListeVignette.
static void setStrStyleCSS(String aStrStyleCSS)
Définit la valeur de strStyleCSS.
static String strSystemeExploitation
static String strRepertHSImages
Répertoire des images des hotspots.
static void creeMenu(VBox vbRacine)
static void projetsNouveau()
static int getiDecalageMac()
Retourne la valeur de iDecalageMac.
static final AnchorPane apVisuPanoramique
static String getStrRepertHSImages()
Retourne la valeur de strRepertHSImages.
static void modeleCharger()
static BigDecimalField bdfAutoTourDemarrage
static String[] strEncode
static void setVbChoixPanoramique(VBox aVbChoixPanoramique)
Définit la valeur de vbChoixPanoramique.
static final AnchorPane apLoupe
static Stage getStPrincipal()
Retourne la valeur de stPrincipal.
static void setPoGeolocalisation(PaneOutil aPoGeolocalisation)
Définit la valeur de poGeolocalisation.
static void setiAutoRotationVitesse(int aiAutoRotationVitesse)
Définit la valeur de iAutoRotationVitesse.
static int getiNombrePanoramiquesFichier()
Retourne la valeur de iNombrePanoramiquesFichier.
static MenuItem mniCube2EquiTransformation
static ComboBox cbAutoRotationVitesse
static void genereVisite(boolean isZip)
static AnchorPane apPanneauPrincipal
static boolean bPetitePlaneteDemarrage
static void setiNombrePanoramiques(int aiNombrePanoramiques)
Définit la valeur de iNombrePanoramiques.
static WritableImage transformerCouleurHotspot(Image imageSource, double couleurFinale, double sat, double bright)
Applique une transformation de couleur à une image de hotspot.
static void setIvAjouterPlan(ImageView aIvAjouterPlan)
Définit la valeur de ivAjouterPlan.
static Menu mnuTransformation
static final int iLargeurVignettes
static void setiAutoTourDemarrage(int aiAutoTourDemarrage)
Définit la valeur de iAutoTourDemarrage.
static boolean isbNetteteTransf()
Retourne la valeur de bNetteteTransf.
static final AnchorPane apWebview
static String strPanoListeVignette
static AnchorPane getApPPAN()
Retourne la valeur de apPPAN.
static MenuItem mniConvertirRatio2to1
MenuItem pour l'outil de conversion des images au ratio 2:1 Convertit des images au format panoramiqu...
static AnchorPane apPanovisu
static String strRepertBarrePersonnalisee
static void afficherDialogueTheme()
Affiche le dialogue de sélection de thème.
static int getiNombrePanoramiques()
Retourne la valeur de iNombrePanoramiques.
static void ouvrirOutilConversionRatio2to1()
Ouvre l'interface de l'outil de conversion des images au ratio 2:1.
static void ajouteAffichageLignes()
static Image imgPanoRetaille2
static void lisFichierConfig()
static String getStrCurrentDir()
Retourne la valeur de strCurrentDir.
static boolean bPanoCharge
static Button btnAjouteZone
static void setStrBingAPIKey(String strBingAPIKey1)
static void retireAffichageHotSpots()
static String strOrdrePanos
static ImageView ivGenereZip
static void creerEditerDiaporama(String strDiaporama)
static GestionnairePlanController getGestionnairePlan()
Retourne la valeur de gestionnairePlan.
static String strPanoEntree
static boolean isbDejaSauve()
Retourne la valeur de bDejaSauve.
static GestionnaireInterfaceController getGestionnaireInterface()
Retourne la valeur de gestionnaireInterface.
static String getStrSystemeExploitation()
Retourne la valeur de strSystemeExploitation.
static MenuItem getMniAjouterPlan()
Retourne la valeur de mniAjouterPlan.
static void setiAutoTourLimite(int aiAutoTourLimite)
Définit la valeur de iAutoTourVitesse.
static ComboBox cbAutoTourType
static boolean netIsAvailable()
Vérifie la disponibilité de la connexion Internet.
static ImageView ivEqui2Cube
static MenuItem mniAjouterPlan
static GestionnaireDiaporamaController gestDiapo
static Boolean isWindows()
static String getStrRepertAppli()
Retourne la valeur de strRepertAppli.
static final ZoneTelecommande[] zones
static GestionnaireInterfaceController gestionnaireInterface
static void panoAjouteImage(double X, double Y)
static MenuItem mniAffichageVisite
static MenuButton btnMnuModeles
static AnchorPane getApVISU()
Retourne la valeur de apVISU.
static void setiNumPoints(int aiNumPoints)
Définit la valeur de iNumPoints.
static void ajouteFichierHisto(String nomFich)
static final String[] strCodeBarre
static boolean isbIntroPetitePlanete()
Retourne la valeur de bIntroPetitePlanete.
static String strDernierRepertoireVisite
Dernier répertoire utilisé pour la génération de visite.
static int getiPanoActuel()
Retourne la valeur de iPanoActuel.
static File fileRepertConfig
Fichier de configuration de l'application.
static void creeDiaporamaHTML(Diaporama diapo, int iNumero)
static void clickBtnValidePano()
static boolean isbAutoRotationDemarre()
Retourne la valeur de bAutoRotationDemarre.
static void setPlans(Plan[] aPlans)
Définit la valeur de plans.
static void planAjouter()
static void afficheHSHTML(int i, double longitude, double latitude)
static AnchorPane apEnvironnement
static String getStrRepertPanos()
Retourne la valeur de strRepertPanos.
static void rafraichitAffichageHotSpots()
Rafraîchit l'affichage des hotspots dans le panneau de visite Utilisé notamment après l'application d...
static Pane paneAffichageHS(String strLstPano, int iNumPano)
static Panoramique[] panoramiquesProjet
Tableau des panoramiques du projet.
static boolean bDejaSauve
static ProgressBar pbarAvanceChargement
static void setiNumHTML(int aiNumHTML)
Définit la valeur de iNumHTML.
static BigDecimalField bdfAutoRotationVitesse
static String strTypeZone
Controleur pour l'affichage des transformations cube / Equi.
static final String EQUI2CUBE
Constante de type de transfrormation Equi / Cube.
static final String CUBE2QUI
Constante de type de transfrormation Cube / Equi.
Gestion de l'interface de visualition de la visite virtuelle.
String getStrPersLib2()
Retourne la valeur de strPersLib2.
String strPoliceInfoBulle
Police utilisée pour les infobulles.
String getStrFenetreURL()
Retourne la valeur de strFenetreURL.
double getOpaciteMasque()
Retourne l'opacité du masque.
double getOffsetXComboMenu()
Retourne la valeur de offsetXComboMenu.
String getStrPositionBarreClassique()
Retourne la position de la barre classique.
double getFenetreInfoTaille()
Retourne la valeur de fenetreInfoTaille.
String getStrAideBarrePersonnalisee()
Obtient la zone de la barre personnalisée affectée au bouton d'aide.
boolean isbAffichePrecSuivMC()
Retourne la valeur de bAffichePrecSuivMC.
String getStrVisibiliteBarreClassique()
Retourne le mode de visibilité de la barre classique.
String getStrCouleurLigneRadar()
Retourne la valeur de strCouleurLigneRadar.
Color getCouleurFondPlan()
Retourne la valeur de couleurFondPlan.
double getFenetreInfoOpacite()
Retourne la valeur de fenetreInfoOpacite.
boolean isbMasqueVignettes()
Indique si le masque masque les vignettes.
String getStrNomLayers()
Retourne la valeur de strNomLayers.
double getLargeurPlan()
Retourne la valeur de largeurPlan.
double getOffsetYBoutonVisiteAuto()
Retourne la valeur de offsetYBoutonVisiteAuto.
boolean isbAfficheRadarCarte()
Retourne la valeur de bAfficheRadarCarte.
int getiNombreZonesBarrePersonnalisee()
Retourne le nombre de zones cliquables de la barre personnalisée.
AnchorPane getApVis()
Retourne la valeur de apVis.
double getOpaciteReseauxSociaux()
Retourne l'opacité des boutons de réseaux sociaux.
double getTailleReseauxSociaux()
Retourne la taille des boutons de réseaux sociaux.
double getOpacitePlan()
Retourne la valeur de opacitePlan.
Color getCouleurFondTheme()
Retourne la valeur de couleurFondTheme.
String getStrZoomBarreClassique()
Indique si le zoom est affiché dans la barre classique.
String getStrCouleurFondRadar()
Retourne la valeur de strCouleurFondRadar.
Color getCouleurHotspots()
boolean isbMasqueHotspots()
Retourne la valeur de bMasqueHotspots.
String getStrFenetreURLCouleur()
Retourne la valeur de strFenetreURLCouleur.
boolean isbAiguilleMobileBoussole()
Indique si l'aiguille de la boussole doit tourner avec la vue.
double getFenetreAideOpacite()
Retourne la valeur de fenetreAideOpacite.
boolean isbReseauxSociauxMeta()
Retourne la valeur de bReseauxSociauxMeta.
static String strNomfichierHSImage
Nom du fichier du hotspot image sélectionné.
boolean isbAfficheComboMenu()
Retourne la valeur de bAfficheComboMenu.
String getStrFenetreInfoImage()
Retourne la valeur de strFenetreInfoImage.
double getOffsetXBarrePersonnalisee()
Retourne la valeur de offsetXBarrePersonnalisee.
boolean isbAfficheVignettes()
Indique si les vignettes de navigation sont affichées.
double getOffsetYBarreClassique()
Retourne le décalage vertical de la barre classique.
int getiCalqueVisiteAuto()
Retourne la valeur de iCalqueVisiteAuto.
String getStrVisibiliteBarrePersonnalisee()
Obtient la zone de la barre personnalisée affectée au bouton de visibilité.
boolean isbTitrePanoramique()
Retourne la valeur de bTitrePanoramique.
boolean isbMasqueTitre()
Indique si le masque masque le titre.
boolean isbMasqueBoussole()
Indique si le masque masque la boussole.
double getOffsetXBoussole()
Retourne le décalage horizontal de la boussole par rapport à sa position de référence.
String getStrInfoBarrePersonnalisee()
Obtient la zone de la barre personnalisée affectée au bouton d'information.
String strCouleurFondInfoBulle
Couleur de fond des infobulles au format hexadécimal.
static String strTypeHS
Type du hotspot sélectionné (navigation, image, HTML).
static String strNomfichierHS
Nom du fichier du hotspot de navigation sélectionné.
String getStrPersURL2()
Retourne la valeur de strPersURL2.
double getdXReseauxSociaux()
Retourne le décalage horizontal des réseaux sociaux par rapport à leur position de référence.
int iArrondiTL
Rayons d'arrondi des coins des infobulles (TL=TopLeft, TR=TopRight, BL=BottomLeft,...
String getStrPleinEcranBarrePersonnalisee()
Obtient la zone de la barre personnalisée affectée au bouton plein écran.
double getFenetreAidePosY()
Retourne la valeur de fenetreAidePosY.
int getiCalqueTitre()
Retourne la valeur de iCalqueTitre.
String getStrCouleurTitre()
Obtient la couleur du texte du titre du panoramique.
void afficheTemplate()
Affiche l'interface selon le template actuel.
void rafraichit()
Rafraîchit l'affichage complet de l'interface utilisateur.
boolean isbMasquePlan()
Indique si le masque masque le plan.
String getStrPositionXComboMenu()
Retourne la valeur de strPositionXComboMenu.
String getStrTitrePoliceNom()
Retourne la valeur de strTitrePoliceNom.
String getStrCouleurTexteCarte()
Retourne la valeur de strCouleurTexteCarte.
double getdXMasque()
Retourne le décalage horizontal du masque par rapport à sa position de référence.
String getStrImageBoussole()
Retourne le nom du fichier image de la boussole utilisée.
double getOffsetXBoutonVisiteAuto()
Retourne la valeur de offsetXBoutonVisiteAuto.
double getOpaciteCarte()
Retourne la valeur de opaciteCarte.
String strCouleurBordureInfoBulle
Couleur de la bordure des infobulles au format hexadécimal.
boolean isbAfficheRadar()
Retourne la valeur de bAfficheRadar.
String getStrSourisBarreClassique()
Indique si le mode souris est affiché dans la barre classique.
String getStrPositionCarte()
Retourne la valeur de strPositionCarte.
String getStrFenetreTexteURL()
Retourne la valeur de strFenetreTexteURL.
String getStrPleinEcranBarreClassique()
Indique si le plein écran est affiché dans la barre classique.
int getiCalqueBarreClassique()
Retourne la valeur de iCalqueBarreClassique.
String getStrRotationBarrePersonnalisee()
Obtient la zone de la barre personnalisée affectée aux boutons de rotation.
int getiCalqueBoussole()
Retourne la valeur de iCalqueBoussole.
String getStrOutilsBarreClassique()
Indique si les outils sont affichés dans la barre classique.
double getOffsetXBarreClassique()
Retourne le décalage horizontal de la barre classique.
boolean isbAffichePersMC2()
Retourne la valeur de bAffichePersMC2.
boolean isbTitreAdapte()
Retourne la valeur de bTitreAdapte.
String getStrPositionXBoutonVisiteAuto()
Retourne la valeur de strPositionXBoutonVisiteAuto.
Color getCouleurHotspotsHTML()
ZoneTelecommande[] getZonesBarrePersonnalisee()
Retourne la valeur de zonesBarrePersonnalisee.
boolean isbMasqueNavigation()
Indique si le masque masque la barre de navigation.
int getiNombreImagesBouton()
Retourne la valeur de iNombreImagesBouton.
boolean isbReseauxSociauxEmail()
Retourne la valeur de bReseauxSociauxEmail.
int getiNombreImagesFond()
Retourne la valeur de iNombreImagesFond.
boolean isbAfficheBoutonVisiteAuto()
Retourne la valeur de bAfficheBoutonVisiteAuto.
int getiCalquePartage()
Retourne la valeur de iCalquePartage.
double getOpaciteVignettes()
Retourne l'opacité des vignettes.
double getHauteurCarte()
Retourne la valeur de hauteurCarte.
int getiCalqueCarte()
Retourne la valeur de iCalqueCarte.
ImageFond[] getImagesFond()
Retourne la valeur de imagesFond.
boolean isbAffichePersMC1()
Retourne la valeur de bAffichePersMC1.
static String strTypeHSHTML
Type du hotspot HTML sélectionné.
void mettreAJourCouleursHotspots()
Met à jour les couleurs de fond des panneaux d'icônes de hotspots selon le thème actuel (clair ou som...
String getStrLien2BarrePersonnalisee()
Obtient le second lien associé à la barre personnalisée.
boolean isbAfficheTitre()
Retourne la valeur de bAfficheTitre.
String getStrPersLib1()
Retourne la valeur de strPersLib1.
double getTailleImageVignettes()
Retourne la taille des images dans les vignettes.
int getiFacteurZoomCarte()
Retourne la valeur de iFacteurZoomCarte.
int getiTailleHotspotsHTML()
Retourne la valeur de iTailleHotspotsHTML.
String getStrPositionYComboMenu()
Retourne la valeur de strPositionYComboMenu.
String getStrCouleurFondRadarCarte()
Retourne la valeur de strCouleurFondRadarCarte.
WritableImage[] getWiNouveauxBoutons()
Retourne la valeur de wiNouveauxBoutons.
String getStrSourisBarrePersonnalisee()
Obtient la zone de la barre personnalisée affectée au bouton de la souris.
String getStrCouleurTextePlan()
Retourne la valeur de strCouleurTextePlan.
boolean isbMasqueCombo()
Indique si le masque masque le menu déroulant (combo).
double getOpaciteTheme()
Retourne la valeur de opaciteTheme.
static String strNomfichierHSHTML
Nom du fichier du hotspot HTML sélectionné.
double getOpaciteBoussole()
Retourne l'opacité de la boussole.
double getOpaciteBarrePersonnalisee()
Obtient l'opacité de la barre de navigation personnalisée.
String getStrPositionPlan()
Retourne la valeur de strPositionPlan.
double getOffsetYBarrePersonnalisee()
Retourne la valeur de offsetYBarrePersonnalisee.
CoordonneesGeographiques getCoordCentreCarte()
Retourne la valeur de coordCentreCarte.
boolean isbAfficheMasque()
Indique si le masque est affiché dans la visualisation.
Color getCouleurFondCarte()
Retourne la valeur de couleurFondCarte.
double getdYReseauxSociaux()
Retourne le décalage vertical des réseaux sociaux par rapport à leur position de référence.
double getFenetreAideTaille()
Retourne la valeur de fenetreAideTaille.
String getStrPositionVignettes()
Retourne la position des vignettes dans l'interface.
String getStrCouleurFondVignettes()
Retourne la couleur de fond des vignettes au format hexadécimal.
String getStrFenetreAideImage()
Retourne la valeur de strFenetreAideImage.
String getStrTitrePosition()
Retourne la valeur de strTitrePosition.
String strCouleurTexteInfoBulle
Couleur du texte des infobulles au format hexadécimal.
String strGetTemplate()
Retourne le template d'interface actuellement sélectionné
WritableImage getWiBarrePersonnaliseeCouleur()
Obtient l'image de la barre personnalisée avec les couleurs appliquées.
int getiCalqueVignettes()
Retourne la valeur de iCalqueVignettes.
int getiCalqueSuivPrec()
Retourne la valeur de iCalqueSuivPrec.
int iTailleBordureTop
Épaisseurs des bordures des infobulles (top, bottom, left, right) en pixels.
NavigateurCarte navigateurCarteOL
Navigateur de carte OpenLayers.
double getTailleBoussole()
Retourne la taille de la boussole en pixels.
double getOffsetYComboMenu()
Retourne la valeur de offsetYComboMenu.
String getStrRotationBarreClassique()
Indique si la rotation est affichée dans la barre classique.
int getiCalqueMenuPanoramiques()
Retourne la valeur de iCalqueMenuPanoramiques.
double getdYMasque()
Retourne le décalage vertical du masque par rapport à sa position de référence.
boolean isbReseauxSociauxTwitter()
Retourne la valeur de bReseauxSociauxTwitter.
int getiTailleHotspotsImage()
Retourne la valeur de iTailleHotspotsImage.
int getiCalquePlan()
Retourne la valeur de iCalquePlan.
static String strTypeHSImage
Type du hotspot image sélectionné.
ScrollPane getSpOutils()
Retourne la valeur de spOutils.
double getFenetreAidePosX()
Retourne la valeur de fenetreAidePosX.
double getOffsetYBoussole()
Retourne le décalage vertical de la boussole par rapport à sa position de référence.
String getStrCouleurTexteVignettes()
Retourne la couleur du texte des vignettes au format hexadécimal.
String getStrPositionReseauxSociaux()
Retourne la position des boutons de réseaux sociaux dans l'interface.
String getStrPositionMasque()
Retourne la position du masque dans l'interface.
int getiCalqueMasquage()
Retourne la valeur de iCalqueMasquage.
double getTailleIconesBarrePersonnalisee()
Obtient la taille des icônes affichées dans la barre personnalisée.
String getStrCouleurLigneRadarCarte()
Retourne la valeur de strCouleurLigneRadarCarte.
int getiTailleHotspotsPanoramique()
Retourne la valeur de iTailleHotspotsPanoramique.
void setTemplate(List< String > strTemplate)
Applique un template d'interface à partir d'une liste de paramètres.
double getTailleBarrePersonnalisee()
Obtient la taille (hauteur) de la barre de navigation personnalisée en pixels.
double getLargeurCarte()
Retourne la valeur de largeurCarte.
boolean isbMasqueReseaux()
Indique si le masque masque les réseaux sociaux.
double getTailleBoutonVisiteAuto()
Retourne la valeur de tailleBoutonVisiteAuto.
double getTitreOpacite()
Obtient l'opacité du fond du titre du panoramique.
double taillePoliceInfoBulle
Taille de la police des infobulles en points.
boolean isbMasqueSuivPrec()
Retourne la valeur de bMasqueSuivPrec.
boolean isbAffichePlanetNormalMC()
Retourne la valeur de bAffichePlanetNormalMC.
Color getCouleurHotspotsPhoto()
String getStrLien1BarrePersonnalisee()
Obtient le chemin vers le fichier SHP (shapefile) définissant les zones de la barre.
void setiNombreImagesFond(int iNombreImagesFond)
Définit la valeur de iNombreImagesFond.
double getTailleMasque()
Retourne la taille du masque en pixels.
String getStrPositionBoussole()
Retourne la position de la boussole dans l'interface.
String getStrPersURL1()
Retourne la valeur de strPersURL1.
String getStrDeplacementsBarreClassique()
Indique si les déplacements sont affichés dans la barre classique.
String getStrPositionBarrePersonnalisee()
Obtient la position de la barre de navigation personnalisée sur l'écran.
String[] getStrNomImagesBoutons()
Retourne la valeur de strNomImagesBoutons.
int getiCalqueBarrePersonnalisee()
Retourne la valeur de iCalqueBarrePersonnalisée.
String getStrPositionYBoutonVisiteAuto()
Retourne la valeur de strPositionYBoutonVisiteAuto.
void ajouterPlan()
Ajoute un nouveau plan à la liste des plans disponibles.
void setiPlanActuel(int iPlanActuel)
Définit la valeur de iPlanActuel.
AnchorPane getApPlan()
Retourne la valeur de apPlan.
Pane getPaneInterface()
Retourne le panneau d'interface principal.
void creeInterface(int iLargeur, int iHauteur)
Label getLblDragDropPlan()
Retourne le label d'indication de drag & drop pour le plan.
ScrollPane getSpOutils()
Retourne la valeur de spOutils.
Définition des hotspots panoramiques.
void setStrCouleurPerso(String strCouleurPerso)
Définit la couleur personnalisée du hotspot.
void setLongitude(Number longitude)
Définit la longitude du hotspot.
void setStrFichierImage(String strFichierImage)
Définit le fichier image d'icône du hotspot.
void setStrTypeAnimation(String strTypeAnimation)
Définit le type d'animation du hotspot.
void setAgranditSurvol(boolean bAgranditSurvol)
Active ou désactive l'agrandissement au survol.
String getStrCouleurPerso()
Retourne la couleur personnalisée du hotspot.
Image getImgIconeSource()
Retourne l'image source non colorée de l'icône.
void setImgIconeSource(Image imgIconeSource)
Définit l'image source non colorée de l'icône.
String getStrNomIconeSource()
Retourne le nom du fichier icône source original.
void setChampVisuel(double champVisuel)
Définit le champ visuel cible.
void setLatitude(Number latitude)
Définit la latitude du hotspot.
void setStrFichierXML(String strFichierXML)
Définit le fichier XML du panorama cible.
int getNumeroPano()
Retourne le numéro du panorama cible.
String getStrFichierImage()
Retourne le chemin du fichier image d'icône du hotspot.
double getLatitude()
Retourne la latitude du hotspot dans le panorama.
void setRegardX(double regardX)
Définit la longitude du regard cible.
String getStrFichierXML()
Retourne le nom du fichier XML du panorama cible.
double getLongitude()
Retourne la longitude du hotspot dans le panorama.
void setStrInfo(String strInfo)
Définit le texte d'information du hotspot.
void setImgVueHs(Image imgVueHs)
Définit l'image de prévisualisation du hotspot.
void setNumeroPano(int iNumeroPano)
Définit le numéro du panorama cible.
void setStrNomIconeSource(String strNomIconeSource)
Définit le nom du fichier icône source original.
void setRegardY(double regardY)
Définit la latitude du regard cible.
Définition des hotspots Image.
void setStrInfo(String strInfo)
Définit la valeur de strInfo.
void setLongitude(Number longitude)
Définit la valeur de longitude.
int getiNumDiapo()
Retourne la valeur de iNumDiapo.
double getLongitude()
Retourne la valeur de longitude.
double getLatitude()
Retourne la valeur de latitude.
void setbAnime(boolean bAnime)
Définit la valeur de bAnime.
void setiNumDiapo(int iNumDiapo)
Définit la valeur de iNumDiapo.
void setLatitude(Number latitude)
Définit la valeur de latitude.
double getLatitude()
Retourne la valeur de latitude.
String getStrTexteHTML()
Retourne la valeur de strTexteHTML.
void setiNombreImages(int iNombreImages)
Définit la valeur de iNombreImages.
void setStrTypeAnimation(String strTypeAnimation)
void setStrTexteHTML(String strTexteHTML)
Définit la valeur de strTexteHTML.
String getStrCouleurPerso()
Retourne la valeur de couleurPerso.
ImageEditeurHTML[] getImagesEditeur()
Retourne la valeur de imagesEditeur.
void setStrFichierImage(String strFichierImage)
Définit la valeur de strFichierImage.
double getLongitude()
Retourne la valeur de longitude.
void creeHTML(String strPageHTML)
Génère le fichier HTML du hotspot dans le répertoire de destination.
String getStrFichierImage()
Retourne la valeur de strFichierImage.
String getStrNomIconeSource()
Retourne la valeur de strNomIconeSource.
void setStrInfo(String strInfo)
Définit la valeur de info.
void setStrCouleurPerso(String strCouleurPerso)
Définit la valeur de couleurPerso.
void setLatitude(Number latitude)
Définit la valeur de latitude.
void setAgranditSurvol(boolean bAgranditSurvol)
Définit la valeur de agranditSurvol.
void setImgIconeSource(Image imgIconeSource)
Définit la valeur de imgIconeSource.
void setLongitude(Number longitude)
Définit la valeur de longitude.
Définition des hotspots Image.
String getStrLienImg()
Retourne la valeur de fichierXML.
void setStrInfo(String strInfo)
Définit la valeur de info.
String getStrNomIconeSource()
Retourne la valeur de strNomIconeSource.
void setStrCouleurFond(String strCouleurFond)
Définit la valeur de strCouleurFond.
void setStrUrlImage(String strUrlImage)
Définit la valeur de urlImage.
void setStrFichierImage(String strFichierImage)
Définit la valeur de fichierImage.
double getLongitude()
Retourne la valeur de longitude.
void setAgranditSurvol(boolean bAgranditSurvol)
Définit la valeur de agranditSurvol.
String getStrCouleurPerso()
Retourne la valeur de couleurPerso.
String getStrFichierImage()
Retourne la valeur de fichierImage.
String getStrCouleurFond()
Retourne la valeur de strCouleurFond.
void setLatitude(Number latitude)
Définit la valeur de latitude.
void setLongitude(Number longitude)
Définit la valeur de longitude.
void setImgIconeSource(Image imgIconeSource)
Définit la valeur de imgIconeSource.
void setStrTypeAnimation(String strTypeAnimation)
Définit la valeur de typeAnimation.
void setOpacite(double opacite)
Définit la valeur de opacite.
void setStrCouleurPerso(String strCouleurPerso)
Définit la valeur de couleurPerso.
double getLatitude()
Retourne la valeur de latitude.
String getStrUrl()
Retourne la valeur de url.
double getOffsetY()
Retourne la valeur de offsetY.
double getOpacite()
Retourne la valeur de opacite.
boolean isMasquable()
Retourne la valeur de masquable.
String getStrPosY()
Retourne la valeur de posY.
int getTailleX()
Retourne la valeur de tailleX.
String getStrCible()
Retourne la valeur de strCible.
String getStrInfobulle()
Retourne la valeur de infobulle.
String getStrPosX()
Retourne la valeur de posX.
double getOffsetX()
Retourne la valeur de offsetX.
String getStrFichierImage()
Retourne la valeur de fichierImage.
int getiCalqueImage()
Retourne la valeur de iCalqueImage.
int getTailleY()
Retourne la valeur de tailleY.
CoordonneesGeographiques recupereCoordonnees()
Récupère les coordonnées actuelles du centre de la carte.
void setPositNord(double positNord)
Définit la position angulaire du nord géographique.
void setFov(double fov)
Définit le champ de vision (Field of View)
void setChoixLatitude(double choixLatitude)
Définit la latitude choisie pour un hotspot.
void affiche()
Affiche le navigateur panoramique dans l'interface.
double getFov()
Retourne le champ de vision (Field of View) actuel.
double getChoixLatitude()
Retourne la latitude choisie par l'utilisateur pour un hotspot.
Button getBtnPleinEcran()
Retourne le bouton de basculement plein écran.
void setLongitude(double longitude)
Définit la longitude de la vue panoramique.
void setImagePanoramique(String strImagePanoramique, Image imgPanoramique)
Définit l'image panoramique à afficher.
double getLatitude()
Retourne la latitude actuelle de la vue panoramique.
double getMinFov()
Retourne le champ de vision minimum autorisé
double getChoixLongitude()
Retourne la longitude choisie par l'utilisateur pour un hotspot.
void setMaxFov(double maxFov)
Définit le champ de vision maximum autorisé
double getChoixFov()
Retourne le FOV choisi par l'utilisateur pour un hotspot.
double getLongitude()
Retourne la longitude actuelle de la vue panoramique.
void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
Ajoute un écouteur de changement de propriété
void setLatitude(double latitude)
Définit la latitude de la vue panoramique.
void setbPleinEcran(boolean bPleinEcran)
Active ou désactive le mode plein écran.
void setChoixFov(double choixFov)
Définit le FOV choisi pour un hotspot.
void setMinFov(double minFov)
Définit le champ de vision minimum autorisé
double getMaxFov()
Retourne le champ de vision maximum autorisé
String getNomFichierPanoramique()
Retourne le nom du fichier image panoramique.
void setChoixLongitude(double choixLongitude)
Définit la longitude choisie pour un hotspot.
AnchorPane affichePano()
Affiche le panorama dans un conteneur AnchorPane.
Service pour interagir avec des API IA (Ollama local ou Hugging Face en ligne) Ollama API: https://gi...
static void setOpenRouterModel(String modelName)
Définit le modèle OpenRouter à utiliser.
static boolean verifierOpenRouterDisponible()
Vérifie si OpenRouter est disponible (token configuré)
static boolean isOllamaAvailable()
Vérifie si un service IA est disponible (Ollama ou Hugging Face)
static String getServiceName()
Retourne le nom du service actuellement utilisé
static void setOllamaModel(String modelName)
Définit le modèle Ollama à utiliser.
static void reinitialiserCacheDescriptions()
Réinitialise le cache des descriptions (à appeler au changement de visite)
static void setForceOllama(boolean force)
Force l'utilisation d'Ollama (mode offline)
static CompletableFuture< String > genererDescription(String titreVisite, String titrePanoramique, String latitude, String longitude, Locale locale)
Génère une description géographique basée sur les informations disponibles IMPORTANT : Tient compte d...
void creeListe()
Crée et initialise la liste ordonnée des panoramiques.
AnchorPane getApListePanoramiques()
Retourne la valeur de apListePanoramiques.
void ajouteNouveauxPanos()
Ajoute les nouveaux panoramiques à la liste.
ObservableList< String > getStrPanos()
Retourne la valeur de strPanos.
ObservableList< PanoramiqueCellule > getCellulesPanoramiques()
Retourne la valeur de cellulesPanoramiques.
AnchorPane getApPaneOutil()
Retourne la valeur de apPaneOutil.
static void deplieReplie(AnchorPane apTitre, ImageView ivBtnPlusTitre)
ImageView getIvBtnPlusOutil()
Retourne la valeur de ivBtnPlusOutil.
AnchorPane getApOutil()
Retourne la valeur de apOutil.
Défintions des vues Panoramiques.
void setHotspotHTML(HotspotHTML hotspot, int i)
Définit la valeur de hotspots.
String getStrDescriptionIA()
Retourne la valeur de strDescriptionIA.
double getRegardY()
Retourne la valeur de lookAtY.
void setStrDescriptionIA(String strDescriptionIA)
Définit la valeur de strDescriptionIA.
int getNombreHotspots()
Retourne la valeur de nombreHotspots.
HotspotImage getHotspotImage(int i)
boolean isAffDescription()
Retourne la valeur de affDescription.
void setHotspotImage(HotspotImage hotspot, int i)
Définit la valeur de hotspots.
void setChampVisuel(double champVisuel)
Définit la valeur de champVisuel.
void setRegardX(double lookAtX)
Définit la valeur de lookAtX.
static final String SPHERE
Constante de type de panoramique : Sphere.
double getChampVisuel()
Retourne la valeur de champVisuel.
boolean isAfficheTitre()
Retourne la valeur de afficheTitre.
void setNumeroPlan(int iNumeroPlan)
Définit la valeur de numeroPlan.
HotspotHTML getHotspotHTML(int i)
void removeHotspotHTML(int num)
void setAfficheTitre(boolean bAfficheTitre)
Définit la valeur de afficheTitre.
void setFovMin(double fovMin)
Définit la valeur de fovMin.
void setbMaxLat(boolean bMaxLat)
Définit la valeur de bMaxLat.
HotspotDiaporama getHotspotDiapo(int i)
void removeHotspotdiapo(int num)
void addHotspotDiapo(HotspotDiaporama hotspot)
void setMarqueurGeolocatisation(CoordonneesGeographiques marqueurGeolocatisation)
Définit la valeur de marqueurGeolocatisation.
void removeHotspot(int num)
static final String CUBE
Constante de type de panoramique : Sphere.
boolean isbMinLat()
Retourne la valeur de bMinLat.
int getNumeroPlan()
Retourne la valeur de numeroPlan.
int getNombreHotspotImage()
Retourne la valeur de nombreHotspotImage.
boolean isAfficheInfo()
Retourne la valeur de afficheInfo.
String getStrTitrePanoramique()
Retourne la valeur de titrePanoramique.
void setMinLat(double minLat)
Définit la valeur de minLat.
boolean isbMaxLat()
Retourne la valeur de bMaxLat.
void addHotspotHTML(HotspotHTML hotspot)
void setMaxLat(double maxLat)
Définit la valeur de maxLat.
double getNombreNiveaux()
Retourne la valeur de nombreNiveaux.
void setZeroNord(double zeroNord)
Définit la valeur de zeroNord.
double getMinLat()
Retourne la valeur de minLat.
void setFovMax(double fovMax)
Définit la valeur de fovMax.
void setAfficheInfo(boolean bAfficheInfo)
Définit la valeur de afficheInfo.
void addHotspotImage(HotspotImage hotspot)
HotSpot getHotspot(int i)
String getStrTypePanoramique()
Retourne la valeur de typePanoramique.
String getStrNomFichier()
Retourne la valeur de nomFichier.
int getNombreHotspotHTML()
Retourne la valeur de nombreHotspotHTML.
void setRegardY(double lookAtY)
Définit la valeur de lookAtY.
void addHotspot(HotSpot hotspot)
void setbMinLat(boolean bMinLat)
Définit la valeur de bMinLat.
int getiNombreHotspotDiapo()
Retourne la valeur de iNombreHotspotDiapo.
void setAffDescription(boolean bAffDescription)
Définit la valeur de affDescription.
void setAffichePlan(boolean bAffichePlan)
Définit la valeur de affichePlan.
double getZeroNord()
Retourne la valeur de zeroNord.
void removeHotspotImage(int num)
Image getImgVisuPanoramique()
Retourne la valeur de imgVisuPanoramique.
void setStrTypePanoramique(String strTypePanoramique)
Définit la valeur de typePanoramique.
boolean isAffichePlan()
Retourne la valeur de affichePlan.
void setStrTitrePanoramique(String strTitrePanoramique)
Définit la valeur de titrePanoramique.
double getRegardX()
Retourne la valeur de lookAtX.
double getFovMax()
Retourne la valeur de fovMax.
CoordonneesGeographiques getMarqueurGeolocatisation()
Retourne la valeur de marqueurGeolocatisation.
double getFovMin()
Retourne la valeur de fovMin.
double getMaxLat()
Retourne la valeur de maxLat.
void setStrImagePlan(String strImagePlan)
Définit la valeur de imagePlan.
void setTitrePlan(String strTitrePlan)
void setPositionX(double positionX)
Définit la valeur de positionX.
void setStrPosition(String strPosition)
Définit la valeur de position.
void setPositionY(double positionY)
Définit la valeur de positionY.
void addHotspot(HotSpot hotspot)
void setDirectionNord(double directionNord)
Définit la valeur de directionNord.
void setStrLienPlan(String strLienPlan)
Définit la valeur de lienPlan.
fonctions de sauvegarde des images
static Image resizeImage(Image img, int newW, int newH)
Redimensionne une image avec accélération GPU.
static void writePng(Image img, String destFile, boolean sharpen, float sharpenLevel)
static Image readTiff(String strNomFich)
static void writeJpeg(Image img, String destFile, float quality, boolean sharpen, float sharpenLevel)
Contrôleur pour l'interface de redimensionnement et compression d'images.
Gestionnaire de thèmes pour l'application EditeurPanovisu.
static Theme loadSavedTheme()
Charge le thème sauvegardé dans les préférences.
static void applyTheme(Scene scene, Theme theme)
Applique un thème à une scène JavaFX.
static Theme[] getDarkThemes()
Retourne les thèmes sombres.
static void applySavedTheme(Scene scene)
Applique le thème sauvegardé à une scène.
static Theme getCurrentTheme()
Retourne le thème actuellement appliqué
static Theme[] getLightThemes()
Retourne les thèmes clairs.
void setStrIdZone(String strIdZone)
String getStrCoordonneesZone()
Retourne la valeur de strCoordonneesZone.
String getStrTypeZone()
Retourne la valeur de strTypeZone.
void setStrCoordonneesZone(String strCoordonneesZone)
Définit la valeur de strCoordonneesZone.
String getStrIdZone()
Retourne la valeur de strNomZone.
Gestionnaire singleton pour l'accélération GPU via OpenCL Gère la détection, l'initialisation et le c...
static synchronized GPUManager getInstance()
Récupère l'instance unique du gestionnaire GPU.
boolean isGPUEnabled()
Vérifie si l'utilisation du GPU est activée par l'utilisateur.
void setGPUEnabled(boolean enabled)
Active ou désactive l'utilisation du GPU.
Serveur HTTP local simple pour servir les visites virtuelles.
void setRootDirectory(String rootDirectory)
Définit le répertoire racine à servir.
String getUrl()
Obtient l'URL complète du serveur.
void reset()
Réinitialise le serveur (arrête et remet le port à 8080)
static synchronized LocalHTTPServer getInstance()
Obtient l'instance unique du serveur.
void start()
Démarre le serveur HTTP.
void stop()
Arrête le serveur HTTP.
Utilitaire pour charger des icônes SVG et les adapter au thème CSS Les SVG utilisent "currentColor" q...
static void clearCache()
Vide le cache des icônes (utile lors d'un changement de thème)
chainesTraduction[ 'de_DE'] pleinEcran
Liste des thèmes disponibles - organisés par thème clair/sombre.